将float转换为datetime时出错

时间:2014-07-21 14:01:01

标签: sql-server

我正在尝试将格式为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

1 个答案:

答案 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