将float转换为datetime时出错

Pat*_*Pat 4 sql-server

我试图将格式为yyyymmdd的float转换为datetime.根据这个格式,该格式的正确样式代码是112.

码:

select
    convert(datetime,cast(myDate as numeric),112)
from MyTable
Run Code Online (Sandbox Code Playgroud)

错误:

Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type datetime.
Run Code Online (Sandbox Code Playgroud)

没有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
Run Code Online (Sandbox Code Playgroud)

我把它包裹在里面,isdate因为那里有一些无效的日期.感谢Matt的帮助.

EDIT2
更好的版本:

SELECT
    TRY_CAST(CAST(CAST(myDate AS INT) AS VARCHAR(8)) AS DATETIME)
FROM MyTable
Run Code Online (Sandbox Code Playgroud)

Mat*_*att 7

首先,您必须将FLOAT转换为VARCHAR.由于FLOAT具有多个小数点,因此必须先将其转换为INT.

DECLARE @myDate FLOAT
SET @myDate = 20140721
SELECT CAST(CAST(@myDate AS INT) AS VARCHAR(8))
--20140721
Run Code Online (Sandbox Code Playgroud)

然后,您可以将VARCHAR转换为DATE或DATETIME格式.

DECLARE @myDate FLOAT
SET @myDate = 20140721
SELECT CAST(CAST(CAST(@myDate AS INT) AS VARCHAR(8)) AS DATE)
--2014-07-21
Run Code Online (Sandbox Code Playgroud)