将char中的char转换为奇数格式的stime

时间:2016-10-14 14:44:52

标签: sql sql-server sql-server-2008

我的列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吗?

提前致谢

3 个答案:

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