在SQL中将异常字符串格式转换为Datetime

时间:2016-06-29 15:21:36

标签: sql sql-server sql-server-2008 datetime type-conversion

我收到以下格式的日期:Wed Jun 29 2016 15:57:45 GMT 0100 (GMT Daylight Time)

将该字符串原样转换为datetime的最佳方法是什么,或者将其剪切到足以转换(例如Jun 29 2016 15:57:45)而不会丢失数据的风险?

4 个答案:

答案 0 :(得分:2)

使用SubstringCharindex字符串函数修剪日期时间

试试这个

declare @date_str varchar(100) = 'Wed Jun 29 2016 15:57:45 GMT 0100 (GMT Daylight Time)'

select cast(substring(@date_str,charindex(' ',@date_str),charindex('GMT',@date_str)-charindex(' ',@date_str)) as datetime)

结果: 2016-06-29 15:57:45.000

答案 1 :(得分:1)

我会做这样的事情。它会在charindex中搜索字符串“GMT”的位置。然后,它使用substring将值拆分(忽略前4个字符)并将结果转换为datetime

样本数据

CREATE TABLE #TestData (OriginalValue nvarchar(100))
INSERT INTO #TestData (OriginalValue)
VALUEs ('Wed Jun 29 2016 15:57:45 GMT 0100 (GMT Daylight Time)')

查询

SELECT 
OriginalValue
,CONVERT(datetime,SUBSTRING(OriginalValue,4,CHARINDEX('GMT',OriginalValue)-5)) NewValue
FROM #TestData

结果

OriginalValue                                           NewValue
Wed Jun 29 2016 15:57:45 GMT 0100 (GMT Daylight Time)   2016-06-29 15:57:45.000

答案 2 :(得分:0)

试试这个:

DECLARE @w VARCHAR(MAX)= 'Wed Jun 29 2016 15:57:45 GMT 0100 (GMT Daylight Time)'

SELECT CAST(SUBSTRING(@w, 4, (PATINDEX('%GMT%', @w)-4)) AS DATETIME)

答案 3 :(得分:0)

如果你的字符串是一个固定的长度,并且右边和左边的部分你正试图摆脱不会增长或缩小,你应该这样做。

DECLARE @DateStr VARCHAR(100)
SET @DateStr = 'Wed Jun 29 2016 15:57:45 GMT 0100 (GMT Daylight Time)'

SELECT CAST(LEFT(RIGHT(@DateStr,49),20) AS DATETIME)