将sql中的字符从奇数格式转换为datetime
我有一个列将sql中的字符从奇数格式转换为datetime,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个列createdatechar(26),其中包含2004-01-30-21.29.12.893374 我想将此列转换为标准的DATETIME 然而,做一个 Convert(DATETIME, createdate,120) 正在给出此错误: 将varchar数据类型转换为datetime数据类型导致值超出范围 我也尝试过转换值的其他偏差,但我觉得原始日期值的格式导致了问题 我想我需要使用多个LEFT-type语句来分解createdatechar(26)值,但我想首先确保我没有把这件
createdatechar(26)
,其中包含2004-01-30-21.29.12.893374
我想将此列转换为标准的DATETIME
然而,做一个
Convert(DATETIME, createdate,120)
正在给出此错误:
将varchar数据类型转换为datetime数据类型导致值超出范围
我也尝试过转换值的其他偏差,但我觉得原始日期值的格式导致了问题
我想我需要使用多个LEFT-type语句来分解createdatechar(26)
值,但我想首先确保我没有把这件事复杂化
谁能帮我把SQL Server 2008中的char
格式转换成datetime
提前谢谢
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
2004-01-30 21:29:12.8933740
或者是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.893
2004-01-30 21:29:12.8933740
使用
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
您可以这样做,无需声明变量或子字符串:
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
那是什么格式?在“createdate”字段上?它看起来像是YYYY-MM-DD-HH-MM-SS.mmmm您不能在
SQL SERVER
;)中享受这种乐趣