【问题标题】:How to format specific char/string to datetime?如何将特定的字符/字符串格式化为日期时间?
【发布时间】:2017-08-21 21:36:41
【问题描述】:

以下字符串/字符是 SQL Server 不支持的日期格式,我需要在 SQL Server 2008 中将其转换为 datetime 数据类型

20170202131759

此日期格式由年、月、日、时、分、秒组成

【问题讨论】:

  • 子字符串是你的朋友。

标签: sql sql-server-2008 datetime


【解决方案1】:

SQL server 无法将此字符串隐式转换为DateTime,需要插入一些字符:

Select SUBSTRING('20170202131759',1,4) + '-' + SUBSTRING('20170202131759',5,2) + '-' + SUBSTRING('20170202131759',7,2) + ' ' + SUBSTRING('20170202131759',9,2)+ ':' + SUBSTRING('20170202131759',11,2) + ':' + SUBSTRING('20170202131759',13,2)

这会给你这个:

2017-02-02 13:17:59,那么它可能是一个DateTime 字符串

【讨论】:

    【解决方案2】:

    如果您遇到的给定格式不是可用于转换的内置格式之一,您通常必须“构建”一个。

    这可以很容易地使用单独的SUBSTRING() 函数调用或使用STUFF() 函数将其按摩成以下格式(连同CAST() 调用以实际将其变为DATETIME):

    -- This will grab each section, append necessary separators and cast to a DATETIME
    SELECT CAST(STUFF(STUFF(STUFF('20170202131759',13,0,':'),11,0,':'),9,0,' ') AS DATETIME)
    

    示例

    【讨论】:

      【解决方案3】:

      20170602 13:17:59 是一种可解析的格式,让你的字符串看起来像这样 & 强制转换:

      select cast(stuff(stuff(stuff('20170202131759', 9, 0, ' '), 12, 0, ':'), 15, 0, ':') as datetime)
      

      (假设为 mmdd)

      【讨论】:

      • 为什么结果的最后一部分有 .ooo。 2017-02-02 13:17:59.000
      • 所有 DATETIME 都可以,以毫秒为单位
      【解决方案4】:

      这使用left()substring() 构建以下字符串格式yyyyMMdd HH:mm:ss,并使用convert() 将其转换为datetime 数据类型。

      declare @str varchar(15)= '20170202131759';
      
      select convert(datetime,
                     left(@str,8)+' '
                     +substring(@str,9,2)+':'
                     +substring(@str,11,2)+':'
                     +substring(@str,13,2)
                     )
      

      rextester 演示:http://rextester.com/HEJ3250

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-07
        • 1970-01-01
        • 2017-04-09
        • 1970-01-01
        • 2018-08-30
        • 1970-01-01
        • 2020-08-07
        相关资源
        最近更新 更多