我的列createdate char(26)
包含2004-01-30-21.29.12.893374
我想将此列转换为标准DATETIME
但是,做一个
Convert(DATETIME, createdate,120)
发出此错误:
将varchar数据类型转换为日期时间数据类型会导致超出范围的值。
我也尝试过转换值的其他偏差,但我觉得原始日期值的格式导致问题。
我认为我需要使用多个LEFT类型语句来打破createdate char(26)
值,但我想确保我不会首先使这一点复杂化。
任何人都可以帮我在SQL Server 2008中将char
格式转换为datetime
吗?
提前致谢
答案 0 :(得分:3)
Declare @String varchar(50) = '2004-01-30-21.29.12.893374'
Select cast(Left(Stuff(Replace(Stuff(@String,11,1,' '),'.',':'),20,1,'.'),23) as datetime)
返回
2004-01-30 21:29:12.893
OR对于DateTime2
Declare @String varchar(50) = '2004-01-30-21.29.12.893374'
Select cast(Stuff(Replace(Stuff(@String,11,1,' '),'.',':'),20,1,'.') as datetime2)
返回
2004-01-30 21:29:12.8933740
答案 1 :(得分:0)
有趣substr
!
select convert(datetime,
substr(createdate, 1, 10) -- use date part as is
+ ' ' + substr(createdate, 12, 2) -- hours
+ ':' + substr(createdate, 15, 2) -- minutes
+ ':' + substr(createdate, 18, 2) -- seconds
+ '.' + substr(createdate, 21, 3) -- milliseconds (limit to 3 digits)
, 120) as createDate_DatetimeType
from Table1
答案 2 :(得分:0)
你可以这样做,没有声明的变量或子串:
SELECT STUFF(a.fix_punc,11,1,' ') as final_dt
FROM
(SELECT REPLACE(LEFT(dt_in, 19), '.', ':') + LEFT(RIGHT(dt_in,7),4)
as fix_punc
FROM yourtable) as a