Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中将异常字符串格式转换为日期时间_Sql_Sql Server_Sql Server 2008_Datetime_Type Conversion - Fatal编程技术网

在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标记您向谁提问