Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 Server 2012将日期时间数据从varchar转换为日期部分_Sql_Date_Datetime_Sql Server 2012 - Fatal编程技术网

SQL Server 2012将日期时间数据从varchar转换为日期部分

SQL Server 2012将日期时间数据从varchar转换为日期部分,sql,date,datetime,sql-server-2012,Sql,Date,Datetime,Sql Server 2012,在这个网站和其他网站上都做了很多研究,但仍然没有有效的解决方案。我有一列varchar数据类型,它包含DateTime数据。我只需要在日期类型列中存储日期部分。尝试了不同的强制转换、转换和其他功能,但仍然无法使其正常工作 基本上我想转换这个 Tue Apr 26 2016 13:54:53 GMT+0200 (CEST) 到 返回 2016-04-26 返回 2016-04-26 好的,这里有一个字段,看起来是psuedo ISO 8601,但不是标准。第一个问题是:这是从哪里来的?通常,

在这个网站和其他网站上都做了很多研究,但仍然没有有效的解决方案。我有一列varchar数据类型,它包含DateTime数据。我只需要在日期类型列中存储日期部分。尝试了不同的强制转换、转换和其他功能,但仍然无法使其正常工作

基本上我想转换这个

Tue Apr 26 2016 13:54:53 GMT+0200 (CEST)

返回

2016-04-26
返回

2016-04-26

好的,这里有一个字段,看起来是psuedo ISO 8601,但不是标准。第一个问题是:这是从哪里来的?通常,标准中没有“Tue”或“GMT”或“CEST”,与格林威治的偏移量格式为+/-:而不是+/-。SQL和许多其他格式可以轻松接受ISO 8601格式的标准化字符串。好的简要说明:

也就是说,您只需稍微了解一下,就可以轻松地得到您想要的:

DECLARE 
    @S VARCHAR(128) = 'Tue Apr 26 2016 13:54:53 GMT+0200 (CEST)'
,   @Valid VARCHAR(128)

--Legitimate ISO 8601 string:
SELECT @Valid = RTRIM(LTRIM(REPLACE(STUFF(STUFF(@S, 1, 4, ''), LEN(@S)-12, 12, ':00'), 'GMT', '')))
SELECT @Valid

--Legitimate DateTimeOffset
SELECT CAST(@Valid AS DATETIMEOFFSET)

--Now that I have a legimiate DateTimeOffset I can downconvert easily
SELECT CAST(CAST(@Valid AS DATETIMEOFFSET) AS DATE)

--AND... Now that I have a legimate Date I can format it many different ways
SELECT CONVERT(VARCHAR, CAST(CAST(@Valid AS DATETIMEOFFSET) AS DATE), 101)
这里真正需要实现的是使用convert函数对DateTime进行神奇的转换。但你可能会想,‘如果我想让它看起来不一样怎么办?’。请尝试此页面:


尽管我可以解析您的示例,但我还是会对仅仅查找从字符串中出现的内容的位置持谨慎态度。如果你得到的东西不符合标准,你应该知道原因。主要原因是,您可能能够将其用于特定实例,但无法反复重复此模式。

好的,这里有一个字段看起来是psuedo ISO 8601,但不是标准字段。第一个问题是:这是从哪里来的?通常,标准中没有“Tue”或“GMT”或“CEST”,与格林威治的偏移量格式为+/-:而不是+/-。SQL和许多其他格式可以轻松接受ISO 8601格式的标准化字符串。好的简要说明:

也就是说,您只需稍微了解一下,就可以轻松地得到您想要的:

DECLARE 
    @S VARCHAR(128) = 'Tue Apr 26 2016 13:54:53 GMT+0200 (CEST)'
,   @Valid VARCHAR(128)

--Legitimate ISO 8601 string:
SELECT @Valid = RTRIM(LTRIM(REPLACE(STUFF(STUFF(@S, 1, 4, ''), LEN(@S)-12, 12, ':00'), 'GMT', '')))
SELECT @Valid

--Legitimate DateTimeOffset
SELECT CAST(@Valid AS DATETIMEOFFSET)

--Now that I have a legimiate DateTimeOffset I can downconvert easily
SELECT CAST(CAST(@Valid AS DATETIMEOFFSET) AS DATE)

--AND... Now that I have a legimate Date I can format it many different ways
SELECT CONVERT(VARCHAR, CAST(CAST(@Valid AS DATETIMEOFFSET) AS DATE), 101)
这里真正需要实现的是使用convert函数对DateTime进行神奇的转换。但你可能会想,‘如果我想让它看起来不一样怎么办?’。请尝试此页面:


尽管我可以解析您的示例,但我还是会对仅仅查找从字符串中出现的内容的位置持谨慎态度。如果你得到的东西不符合标准,你应该知道原因。主要原因是,您可能能够在特定实例中使用此模式,但无法反复重复此模式。

假设您的日和月部分始终为3个字符长,可以这样简单地完成:

DECLARE @d VARCHAR(100)='Tue Apr 26 2016 13:54:53 GMT+0200 (CEST)';
SELECT CONVERT(DATE,SUBSTRING(@d,4,12),109);
如果这是很容易的一个将不得不找到与查林德斯空白,但我不认为这样

格式代码109表示mon-dd-yyyy-hh:mi:ss:mmmAM或PM


请注意,包含依赖于语言的部分的格式是由魔鬼直接发送的,以产生永无止境的痛苦。。。这在具有不同语言设置的服务器上不起作用

假设您的日和月部分始终为3个字符长,可以这样简单地完成:

DECLARE @d VARCHAR(100)='Tue Apr 26 2016 13:54:53 GMT+0200 (CEST)';
SELECT CONVERT(DATE,SUBSTRING(@d,4,12),109);
如果这是很容易的一个将不得不找到与查林德斯空白,但我不认为这样

格式代码109表示mon-dd-yyyy-hh:mi:ss:mmmAM或PM


请注意,包含依赖于语言的部分的格式是由魔鬼直接发送的,以产生永无止境的痛苦。。。这在具有不同语言设置的服务器上不起作用

可能的副本可能的副本与此一起获得确切的输出convertvarchar10,castSubstring@String,12,4+Substring@String,4,7作为日期,101@Searching你指出这一点是完全正确的。我只是不确定OP是想要个约会还是字符串。我同意你的看法。只是不在问题中+我不确定该格式是否可以以日期类型存储在sqlserver中。转换的部分。如果我错了,请纠正我。..Ta。@搜索时可以插入/更新mm/dd/yyyy格式的日期字段,但它仍然以ISO格式存储。创建临时日期表;将“04/26/2016”插入临时值中;从tempYup中选择*这是我的理解。。它只需要转换成标准格式。同时,要获得准确的输出convertvarchar10,castSubstring@String,12,4+Substring@String,4,7作为日期,101@Searching你指出这一点是完全正确的。我只是不确定OP是想要个约会还是字符串。我同意你的看法。只是不在问题中+我不确定该格式是否可以以日期类型存储在sqlserver中。转换的部分。如果我错了,请纠正我。..Ta。@搜索时可以插入/更新mm/dd/yyyy格式的日期字段,但它仍然以ISO格式存储。创建临时日期表;将“04/26/2016”插入临时值中;从tempYup中选择*这是我的理解。。它会变成标准格式。好吧,那很有趣。。。魔鬼thing@JohnCappelletti嘿,你已经越过了10公里的边界!恭喜!好吧,那很有趣。。。这个
魔王thing@JohnCappelletti嘿,你已经越过了10公里的边界!恭喜!