【发布时间】:2015-02-23 16:17:20
【问题描述】:
我知道已经发布了很多关于将字符串转换为 datetime 的问题,但我还没有找到任何可以转换像 20120225143620 这样的字符串,其中包括秒数。
我试图执行一个干净的转换,而不是对每个段进行子串化并与/ 和: 连接。
有人有什么建议吗?
【问题讨论】:
标签: sql-server datetime sql-server-2008-r2 datetime-format
我知道已经发布了很多关于将字符串转换为 datetime 的问题,但我还没有找到任何可以转换像 20120225143620 这样的字符串,其中包括秒数。
我试图执行一个干净的转换,而不是对每个段进行子串化并与/ 和: 连接。
有人有什么建议吗?
【问题讨论】:
标签: sql-server datetime sql-server-2008-r2 datetime-format
您可以使用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 函数将一个字符串插入另一个字符串。它在开始位置删除第一个字符串中指定长度的字符,然后将第二个字符串插入到开始位置的第一个字符串中。
STUFF ( character_expression , start , length , replaceWith_expression )
【讨论】:
YYYYMMDD HH:MM 所需格式:'20120225 14:36' SET @datestring = STUFF(STUFF(@datestring,9,0,' '),12,0,':')