我已经获得了一些数据,其中有一个'float'列,其中包含一个前面带有1的日期。即值1171030代表2017年10月30日。
我试图将其转换为正常日期时,我试图将其删除(即.171030)。
非常感谢一些指导。
非常感谢
答案 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,可能会出错,但这可能是捕捉和预防问题的好方法。