我试图将格式为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)
首先,您必须将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)
| 归档时间: |
|
| 查看次数: |
12649 次 |
| 最近记录: |