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

时间:2016-11-17 20:27:55

标签: sql date datetime sql-server-2012

在本网站和其他网站上进行了大量研究,但仍然没有有效的解决方案。我有一列varchar数据类型,它包含DateTime个数据。我只需要在Date类型列中存储Date部分。尝试过Cast,Convert和其他功能的不同方式,但仍然无法使其发挥作用。

基本上我想转换这个

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

04/26/2016

3 个答案:

答案 0 :(得分:2)

假设您的日期和月份部分总是3个字符,这可以简单地完成:

DECLARE @d VARCHAR(100)='Tue Apr 26 2016 13:54:53 GMT+0200 (CEST)';
SELECT CONVERT(DATE,SUBSTRING(@d,4,12),109);

如果这很容易,我必须找到CHARINDEX的空白,但我不这么认为......

格式代码109表示mon dd yyyy hh:mi:ss:mmmAM (or PM) Details here

请注意,魔鬼会直接发送包含语言依赖部分的格式,以创建永无止境的痛苦......这对于具有不同语言设置的服务器无效!

答案 1 :(得分:1)

Declare @String varchar(max) = 'Tue Apr 26 2016 13:54:53 GMT+0200 (CEST)'
Select cast(Substring(@String,12,4)+Substring(@String,4,7) as date)

返回

2016-04-26

答案 2 :(得分:1)

好的一些事情,你有一个看起来像伪造ISO 8601但不是标准的字段。第一个问题是:"这是从哪里来的?"通常情况下,你没有“星期二”。或者' GMT'或者'(CEST)'在标准中,与Greenwich Meantime的偏移格式为(+/-)##:## NOT(+/-)####。 SQL和许多其他格式可以轻松接受ISO 8601格式的标准化字符串。好的简要说明:https://www.w3.org/TR/NOTE-datetime

话虽如此,你可以轻松地得到你想要的东西:

var changedElements = $("input:checkbox").filter(function() {
    var originalValue = $(this).attr("originalValue"); //unsure if this is auto-parsed to a bool, will have to check
    var originalBoolValue = originalValue === "true";

    return originalBoolValue != this.checked;
});

这里要实现的真实事情是使用convert函数进行DateTime的神奇转换。但是你可能想知道如果我希望它看起来不一样怎么样?'。试试这个页面:

http://www.sql-server-helper.com/tips/date-formats.aspx

即使我能解析你的例子,我只是发现事物的位置似乎来自一个字符串,我会很谨慎。如果你得到的东西不符合标准,你应该知道原因。主要原因是你可能能够使这个工作用于特定的实例,但不能一遍又一遍地重复这种模式。