将字符串转换为日期并获取日期部分

Convert String to date and get Datepart

我有一个字符串列,其中包含这种格式的日期时间值(2016 年 11 月 8 日星期二 06:14:57 GMT)。我怎样才能得到这个值的日期部分?喜欢。

SELECT DATEPART(MINUTE, 'Tue Nov 8 06:14:57 GMT 2016') as 'Minute'
SELECT DATEPART(Day, 'Tue Nov 8 06:14:57 GMT 2016') as 'Day'

等等。

提前致谢, 齐亚德

这是一种从奇怪的字符串中获取日期的方法

DECLARE @table TABLE (YourStrangeDate VARCHAR(100));
INSERT INTO @table VALUES('Tue Nov 8 06:14:57 GMT 2016');

WITH Splitted AS
(
    SELECT CAST('<x>' + REPLACE(YourStrangeDate,' ','</x><x>') + '</x>' AS XML) AS Casted
    FROM @table 
)
SELECT
CAST(
             Casted.value('/x[3]','nvarchar(2)') --third part = "8" 
     + ' ' + Casted.value('/x[2]','nvarchar(3)') --second part = "Nov"
     + ' ' + Casted.value('/x[6]','nvarchar(4)') --6th part = "2016"
     + ' ' + Casted.value('/x[4]','nvarchar(8)') --4th part = Time
     AS DATETIME)
FROM Splitted;

注意 隐含的 CAST()DATETIME 将取决于您的系统设置。如果您的月份缩写不是您的系统期望的缩写(例如,“Dec”在德语系统中是“Dez”),这将失败。

根据您的评论,我认为这是一次性操作(CSV 导入)。您可以在第一行指定 SET LANGUAGE English; 以确保...

有了真实的日期就可以继续使用相关的功能如DATEPART()

提示

始终使用适当的类型来存储您的数据!您应该使用它来修复您的数据,而不是用于任何混乱的输出...

取决于日期 9 and/or 10 个符号属于日,第一个 : 符号后的 1 或 2 个符号属于分钟。所以,你可以通过这个查询得到它们

    declare @x varchar(50) = 'Tue Nov 8 06:14:57 GMT 2016'
    select [Day] = cast(substring(@x, 9, 2) as int)
           , 'Minute' = replace(substring(@x, charindex(':', @x) + 1, 2), ':', '')