将带有'YYYYMMDDHHMMSS'格式的字符串转换为datetime

sad*_*ave 12 sql-server datetime datetime-format sql-server-2008-r2

我知道有很多关于将字符串转换为datetime已经发布的问题,但是我没有找到任何用于转换字符串的内容20120225143620,包括秒.

我试图不串-ING出每个段,并与串联执行清洁转化/:.

有没有人有什么建议?

Tan*_*ner 19

您可以使用该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
Run Code Online (Sandbox Code Playgroud)

输出:

FormattedDate
=======================
2012-02-25 14:36:20.000
Run Code Online (Sandbox Code Playgroud)

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

为此,您无需以任何方式分隔日期部分,因为SQL Server将能够理解它的格式.

相关阅读:

STUFF(Transact-SQL)

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

STUFF(character_expression,start,length,replaceWith_expression)