将'EEE MMM dd HH:mm:ss zzz yyyy'格式varchar转换为SQL Server中的日期

时间:2017-05-23 05:55:05

标签: sql sql-server database

我有一个要求,我需要使用sql server将'EEE MMM dd HH:mm:ss zzz yyyy'格式的varchar列转换为日期。

有没有办法在SQL Server或任何其他方法中使用强制转换或转换函数。

这里的EEE是指星期几,例如星期一或星期二等

5 个答案:

答案 0 :(得分:2)

我仍然不知道EEE代表什么,所以我把它从我的答案中删除了。 使用Substring将字符串分解并重新拉伸为可转换格式,并将一些转换为datetime并返回字符串,我想出了这个解决方案。:

--                            'EEE MMM dd HH:mm:ss zzz yyyy' 
DECLARE @String varchar(32) = 'EEE JAN 25 16:37:45 -02:00 2017'

SELECT  CONVERT(DateTime,
            CONVERT(datetimeoffset,
                CONVERT(char(19), 
                   CONVERT(DateTime, 
                       SUBSTRING(@String, 9, 3) + -- Day 
                       SUBSTRING(@String, 5, 4) + -- Month
                       SUBSTRING(@String, 28,4) + -- Year
                       SUBSTRING(@String, 11,9) -- Time
                   , 113) -- DateTime
                , 126) -- ISO8601   -- string representation of the datetime value in this format: yyyy-mm-ddThh:mi:ss.mmm
              + SUBSTRING(@String, 21, 6) -- ISO8601 with time zone - yyyy-mm-ddThh:mi:ss.mmmZ
            , 127) -- You can't convert directly to DateTime, you must first go though DateTimeOffset
        )-- Finally, A datetime value 

结果:

25.01.2017 16:37:45

You can see a live demo on rextester:

答案 1 :(得分:0)

我无法将此日期格式作为标准SQL Server日期格式找到,因此使用了以下内容:

SELECT CAST(SUBSTRING(DateField, 9, 2) + ' '
    + SUBSTRING(DateField, 5, 3) + ' '
    + SUBSTRING(DateField, 27, 4) + ' '
    + SUBSTRING(DateField, 12, 8) AS DATETIME2 )

答案 2 :(得分:0)

另一种切实可行的方法如下。您可能会考虑使用月份参数, 您可以使用 ng build --prod --env=prod ,如果您真的想调查一下。 但是由于我需要将它运行2个月,所以我没有打扰...或者您可以只运行12次而已。

select DATEPART(MM,'january 01 2011')--returns 1

答案 3 :(得分:-1)

SELECT CONVERT(VARCHAR(10), GETDATE(), 111) AS [YYYY/MM/DD]

答案 4 :(得分:-1)

在SQL Server中,您可以使用以下功能:CAST()CONVERT()。其中CONVERT()功能更丰富,主要用于获取不同风格的日期时间数据。

SQL Server:

 SELECT CAST('01-JAN-2009' AS DATETIME)

或者您可以使用:

 SELECT CONVERT(DATETIME,'01/JAN/2009') metod

在其他数据库中是特殊功能to_date()