浮点数的SQL日期格式(没有'1')

时间:2018-03-20 19:01:35

标签: sql sql-server

我已经获得了一些数据,其中有一个'float'列,其中包含一个前面带有1的日期。即值1171030代表2017年10月30日。

我试图将其转换为正常日期时,我试图将其删除(即.171030)。

非常感谢一些指导。

非常感谢

2 个答案:

答案 0 :(得分:1)

呸!我们试试datefromparts()

select datefromparts((val - 100000) / 10000, floor(val / 100) % 100, val % 100)

或者,这是另一种方法:

select convert(date, right(convert(varchar(255), cast(val as int)), 6))

SQL Server在它理解的日期格式中实际上非常灵活。

答案 1 :(得分:1)

我假设这可能是由非符合Y2K的方法(例如JavaScript getYear())产生的,它只返回当前年份减去1900年。我不清楚这些数据是否即将到来来自平面文件或已经导入数据库表。

如果将此值视为字符串:

case length(val)
    when 7 then cast('20' + right(val, 6) as date)
    when 6 then cast('19' + val as date)
end

如果你真的有一个float(或int)值:

cast(cast(cast(19000000 + @val as int) as char(8)) as date)

在这种情况下,您需要转换字符值,而不是直接转到日期。注意从float到char的字符串转换。如果你喜欢更短的话,那么你可以逃脱这个:

cast(str(19000000 + @val, 8) as date);

假设长度为8,可能会出错,但这可能是捕捉和预防问题的好方法。