如何在SQL Server中将“Thu Jun 11 00:49:35 IST 2015”转换为“YYYY-MM-DD hh:mm:ss”?

时间:2017-07-16 08:45:23

标签: sql date datetime sql-server-2012 type-conversion

如何在SQL Server中将“Thu Jun 11 00:49:35 IST 2015”转换为“YYYY-MM-DD hh:mm:ss”

我尝试转换和投射,但它正在抛出错误

1 个答案:

答案 0 :(得分:0)

在我提出解决方案之前需要注意的一些事项:

  • 如有可能,应修改此信息的来源,以符合某些ISO标准日期。
  • 2016年之前的SQL Server不能很好地处理时区名称,因此我假设您的所有字符串都包含“IST”。如果他们不这样做,你将不得不通过搜索它们并创建某种开关案例来修改产生的datetimeoffset。
  • 我不知道您的日期表示是两位数还是可变位数。我假设它是可变的,但如果它是两位数,你可以用固定字符串解析来简化这个答案。
  • 由于您有时区,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