在SQL中将异常字符串格式转换为日期时间
我收到的日期格式如下:在SQL中将异常字符串格式转换为日期时间,sql,sql-server,sql-server-2008,datetime,type-conversion,Sql,Sql Server,Sql Server 2008,Datetime,Type Conversion,我收到的日期格式如下:2016年6月29日星期三15:57:45 GMT 0100(GMT夏令时) 将该字符串转换为现有的datetime,或者将其缩减到足以转换(例如Jun 29 2016 15:57:45)而不丢失数据的最佳方式是什么?使用Substring和Charindex字符串函数来调整日期时间 试试这个 declare @date_str varchar(100) = 'Wed Jun 29 2016 15:57:45 GMT 0100 (GMT Daylight Time)' s
2016年6月29日星期三15:57:45 GMT 0100(GMT夏令时)
将该字符串转换为现有的
datetime
,或者将其缩减到足以转换(例如Jun 29 2016 15:57:45
)而不丢失数据的最佳方式是什么?使用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
使用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
我会这样做。它在charindex
中搜索字符串“GMT”的位置。然后,它使用子字符串
将值拆分出来(忽略前4个字符),并将结果转换为日期时间
样本数据
CREATE TABLE #TestData (OriginalValue nvarchar(100))
INSERT INTO #TestData (OriginalValue)
VALUEs ('Wed Jun 29 2016 15:57:45 GMT 0100 (GMT Daylight Time)')
质疑
结果
OriginalValue NewValue
Wed Jun 29 2016 15:57:45 GMT 0100 (GMT Daylight Time) 2016-06-29 15:57:45.000
我会这样做。它在
charindex
中搜索字符串“GMT”的位置。然后,它使用子字符串
将值拆分出来(忽略前4个字符),并将结果转换为日期时间
样本数据
CREATE TABLE #TestData (OriginalValue nvarchar(100))
INSERT INTO #TestData (OriginalValue)
VALUEs ('Wed Jun 29 2016 15:57:45 GMT 0100 (GMT Daylight Time)')
质疑
结果
OriginalValue NewValue
Wed Jun 29 2016 15:57:45 GMT 0100 (GMT Daylight Time) 2016-06-29 15:57:45.000
试试这个:
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)
试试这个:
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)
如果你的绳子是固定长度的,并且你想要摆脱的左右两边的绳子不会变长或变短,你应该这样做
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)
如果你的绳子是固定长度的,并且你想要摆脱的左右两边的绳子不会变长或变短,你应该这样做
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)
存储日期时间字符串的最佳方式是在
datetime
datatype中。永远不要将其存储为字符串。解析时会很麻烦是的,我想将其转换为基于Datetime
.CLR regex的转换函数。所有内容都是GMT 0100还是表示不同的时区?如果不同的区域在转换过程中我不想丢失该部分,我会使用DATETIMEOFFSET或转换为DATETIMEOFFSET,然后转换为本地时间作为DATETIME……存储DATETIME字符串的最佳方式是在DATETIME
datatype中。永远不要将其存储为字符串。解析时会很麻烦是的,我想将其转换为基于Datetime
.CLR regex的转换函数。所有内容都是GMT 0100还是表示不同的时区?如果不同的区域在转换过程中我不想丢失该部分,我会使用DATETIMEOFFSET或转换为DATETIMEOFFSET,然后转换为本地时间作为DATETIME……当日名超过3个字符时,可能会有点犹豫,但星期三的字符数超过3个。似乎OP使用三个字符的值作为他的日名称。始终使用3个字符。但不是我选择了这种疯狂的日期格式,我只是被它卡住了。@Matt-为什么它很有趣,如果用三个字符,那么周四实际上就是周四,这似乎是合乎逻辑的。这不是火箭科学的朋友。我如何再次否决评论?这是一个主要的候选人。OP已经确认日名使用了三个字符,使用哪三个字母有关系吗?而且,这个命名约定是我在任何地方见过的唯一一个,为什么它会是其他的呢?最后,当day name超过3个字符时,您可以使用@matt标记您向谁提问。星期三的字符数超过3个。似乎OP使用三个字符的值作为他的日名称。始终使用3个字符。但不是我选择了这种疯狂的日期格式,我只是被它卡住了。@Matt-为什么它很有趣,如果用三个字符,那么周四实际上就是周四,这似乎是合乎逻辑的。这不是火箭科学的朋友。我如何再次否决评论?这是一个主要的候选人。OP已经确认日名使用了三个字符,使用哪三个字母有关系吗?而且,这个命名约定是我在任何地方见过的唯一一个,为什么它会是其他的呢?最后,您可以使用@Matt标记您向谁提问