我收到以下格式的日期:Wed Jun 29 2016 15:57:45 GMT 0100 (GMT Daylight Time)
将该字符串原样转换为datetime
的最佳方法是什么,或者将其剪切到足以转换(例如Jun 29 2016 15:57:45
)而不会丢失数据的风险?
答案 0 :(得分:2)
使用Substring
和Charindex
字符串函数修剪日期时间
试试这个
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)