如何在SQL Server中将“Thu Jun 11 00:49:35 IST 2015”
转换为“YYYY-MM-DD hh:mm:ss”
?
我尝试转换和转换,但它抛出了一个错误
在我提出解决方案之前,需要注意几点:
- 如果可能的话,应修改此信息的来源,以符合某些ISO标准日期。
- SQL Server 2016 之前不能很好地处理时区名称,因此我假设您的所有字符串都包含"IST"。如果没有,则必须通过搜索它们并创建某种开关大小写来修改生成的日期时间偏移量来相应地进行调整。
- 我不知道你的日表示是两位数还是可变数。我假设它是可变的,但如果它是两位数,你可以用固定字符串解析来简化这个答案。
- 由于您有时区,因此
YYYY-MM-DD hh:mm:ss
的目标表示形式不明确。我已在此处将其转换为UTC。
如果您的字符串位于名为 Dates 的表中,其中列包含 HorribleString,则:
select
convert(varchar(100), convert(datetime2, convert(datetimeoffset,
substring(HorribleString, len(HorribleString) - 3, 4) -- Year
+ substring(HorribleString, 4, len(HorribleString) - 12) -- len(Thu ) + len( IST 2015) = 12
+ case substring(HorribleString, len(HorribleString) - 7, 3) -- Timezone
when 'IST' then ' +05:30'
else ''
end
, 109), 1), 20)
from
Dates