从SQL中的无格式文本中解析日期

Bes*_*ska 9 sql t-sql sql-server

我试图找出一种优雅的方式从文本列中获取具有类似"YYYYMMDD"的数据的日期...所以我们可能会在列中看到"20060508"作为值,我希望能够从查询返回为日期(2006年5月8日).

我确信如果有足够的时间,我可以一起破解一些东西,但我想到的方法看起来非常糟糕,我怀疑有一种方法可以在一个查询中优雅地完成.

有什么建议?

mar*_*c_s 25

这已经是一个有效的日期 - ISO-8601格式 - 只需使用:

SELECT CAST('20060508' AS DATETIME)
Run Code Online (Sandbox Code Playgroud)

或者:

SELECT CONVERT(DATETIME, '20060508', 112)
Run Code Online (Sandbox Code Playgroud)

这应该做得很好!

为了获得"2006年5月8日"显示,使用日期转换样式107执行另一个转换为varchar:

SELECT CONVERT(VARCHAR(25), CAST('2006-05-08' AS DATETIME), 107)
Run Code Online (Sandbox Code Playgroud)

有关在MS SQL中进行转换和转换的更多信息,请参见此处