我正在尝试将格式为yyyymmdd的float转换为datetime。根据{{3}},该格式的正确样式代码为112。
代码:
select
convert(datetime,cast(myDate as numeric),112)
from MyTable
错误:
Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type datetime.
如果没有cast as numeric
部分,我会收到相同的错误。我已经四处寻找了几个小时,但我还没找到能解决这个问题的东西。如果您知道将浮点数转换为日期时间的更好方法,我会接受这个想法。
感谢您的帮助。
修改
这是工作代码:
SELECT
case when isdate(CAST(CAST(myDate AS INT) AS VARCHAR(8))) = 1
then CAST(CAST(CAST(myDate AS INT) AS VARCHAR(8)) AS DATETIME)
end
from MyTable
我把它包装在isdate
中,因为那里有一些无效日期。感谢Matt的帮助。
EDIT2
更好的版本:
SELECT
TRY_CAST(CAST(CAST(myDate AS INT) AS VARCHAR(8)) AS DATETIME)
FROM MyTable
答案 0 :(得分:5)
首先,您必须将FLOAT转换为VARCHAR。由于FLOAT有多个小数点,因此必须先将其转换为INT。
DECLARE @myDate FLOAT
SET @myDate = 20140721
SELECT CAST(CAST(@myDate AS INT) AS VARCHAR(8))
--20140721
然后您可以将VARCHAR转换为DATE或DATETIME格式。
DECLARE @myDate FLOAT
SET @myDate = 20140721
SELECT CAST(CAST(CAST(@myDate AS INT) AS VARCHAR(8)) AS DATE)
--2014-07-21