【问题标题】:Convert a string with 'YYYYMMDDHHMMSS' format to datetime将具有 'YYYYMMDDHHMMSS' 格式的字符串转换为日期时间
【发布时间】:2015-02-23 16:17:20
【问题描述】:

我知道已经发布了很多关于将字符串转换为 datetime 的问题,但我还没有找到任何可以转换像 20120225143620 这样的字符串,其中包括秒数。

我试图执行一个干净的转换,而不是对每个段进行子串化并与/: 连接。

有人有什么建议吗?

【问题讨论】:

    标签: sql-server datetime sql-server-2008-r2 datetime-format


    【解决方案1】:

    您可以使用STUFF() 方法将字符插入到字符串中,以将其格式化为 SQL Server 能够理解的值:

    DECLARE @datestring NVARCHAR(20) = '20120225143620'
    
    -- desired format: '20120225 14:36:20'
    SET @datestring = STUFF(STUFF(STUFF(@datestring,13,0,':'),11,0,':'),9,0,' ')
    
    SELECT CONVERT(DATETIME, @datestring) AS FormattedDate
    

    输出:

    FormattedDate
    =======================
    2012-02-25 14:36:20.000
    

    如果您的字符串始终具有相同的长度和格式,则此方法将有效,并且它从字符串的末尾到开头都可以生成以下格式的值:YYYYMMDD HH:MM:SS

    为此,您无论如何都不需要分隔日期部分,因为 SQL Server 将能够理解它的格式。

    相关阅读:

    STUFF (Transact-SQL)

    STUFF 函数将一个字符串插入另一个字符串。它在开始位置删除第一个字符串中指定长度的字符,然后将第二个字符串插入到开始位置的第一个字符串中。

    STUFF ( character_expression , start , length , replaceWith_expression )

    【讨论】:

    • 如果 datestringGMT + 2 并且我需要 FormattedDateGMT + 0 ?
    • YYYYMMDD HH:MM 所需格式:'20120225 14:36' SET @datestring = STUFF(STUFF(@datestring,9,0,' '),12,0,':')
    猜你喜欢
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多