Sql 与日期时间格式混淆

Sql 与日期时间格式混淆,sql,sql-server,Sql,Sql Server,我有类似于“Wed Jan 22 13:30:52 UTC 2020”的字符串,需要使用Sql Server将此字符串转换为IST格式 我不知道上述格式。这似乎不是SQL Server内部识别的任何格式: 所以,你必须自己转换它。假设我们有您的样本日期: declare @date varchar(50) = 'Wed Jan 22 13:30:52 UTC 2020' 可以使用子字符串获取日期部分(假设每个日期使用完全相同的格式): 现在,您只需要从这些日期部分构建日期时间值: selec

我有类似于“Wed Jan 22 13:30:52 UTC 2020”的字符串,需要使用Sql Server将此字符串转换为IST格式


我不知道上述格式。

这似乎不是SQL Server内部识别的任何格式:

所以,你必须自己转换它。假设我们有您的样本日期:

declare @date varchar(50) = 'Wed Jan 22 13:30:52 UTC 2020'
可以使用子字符串获取日期部分(假设每个日期使用完全相同的格式):

现在,您只需要从这些日期部分构建日期时间值:

select datetimefromparts(convert(int, substring(@date, 9, 3)) + 2000,
                         case substring(@date, 5, 3) when 'Jan' then 1
                                                     when 'Feb' then 2
                                                     ...     
                         end,
                         case substring(@date, 1, 3) when 'Mon' then 1
                                                     when 'Tue' then 2
                                                     when 'Wed' then 3
                                                     ...  
                         end,                        
                         convert(int, substring(@date, 12, 2)),
                         convert(int, substring(@date, 15, 2)),
                         convert(int, substring(@date, 18, 2)),
                         0)
最后,您可以在时区“印度标准时间”添加
以定义IST时区

select datetimefromparts(convert(int, substring(@date, 9, 3)) + 2000,
                         case substring(@date, 5, 3) when 'Jan' then 1
                                                     when 'Feb' then 2
                                                     ...     
                         end,
                         case substring(@date, 1, 3) when 'Mon' then 1
                                                     when 'Tue' then 2
                                                     when 'Wed' then 3
                                                     ...  
                         end,                        
                         convert(int, substring(@date, 12, 2)),
                         convert(int, substring(@date, 15, 2)),
                         convert(int, substring(@date, 18, 2)),
                         0)
       AT TIME ZONE 'India Standard Time'   

以下内容可能会有所帮助:

declare @date varchar(50) = 'Wed Jan 22 13:30:52 UTC 2020'

select CAST(SUBSTRING(@date, 5, CHARINDEX('UTC',@date,1)-6) + SUBSTRING(@date,CHARINDEX('UTC',@date,1)+3,100) AS DATETIME) AT TIME ZONE 'India Standard Time'

AT TIME ZONE
适用于SQL Server 2016及更高版本。

是的,但我混淆了这种“Wed Jan 22 13:30:52 UTC 2020”格式。实际上,上述字符串从一个csv传输到表中,这里我需要日期转换。删除了不需要的标记。。。
declare @date varchar(50) = 'Wed Jan 22 13:30:52 UTC 2020'

select CAST(SUBSTRING(@date, 5, CHARINDEX('UTC',@date,1)-6) + SUBSTRING(@date,CHARINDEX('UTC',@date,1)+3,100) AS DATETIME) AT TIME ZONE 'India Standard Time'