我正在试图找出一种优雅的方法来从文本列中获取具有类似“YYYYMMDD”的数据的日期...所以我们可能会在列中看到“20060508”作为值,我希望能够从查询返回日期(2006年5月8日)。
我确信如果有足够的时间我可以一起破解一些东西,但我想的方法看起来很蹩脚,我怀疑在单个查询中有一种方法可以优雅地完成。
有什么建议吗?
答案 0 :(得分:25)
这已经是一个有效的日期 - ISO-8601格式 - 只需使用:
SELECT CAST('20060508' AS DATETIME)
或者:
SELECT CONVERT(DATETIME, '20060508', 112)
这应该就好了!
为了获得“2006年5月8日”显示,请使用日期转换样式107执行另一个转换为varchar:
SELECT CONVERT(VARCHAR(25), CAST('2006-05-08' AS DATETIME), 107)
有关施法和放大的更多信息,请参阅here在MS SQL中转换
答案 1 :(得分:2)
select cast('20060508' as datetime) AS MyDate
给你这个结果......
MyDate
-----------------------
2006-05-08 00:00:00.000
有关施法和放大的更多信息,请参阅here在MS SQL中转换。
如果您正在尝试实现特定格式(2006年5月8日) - 您应该考虑将该列作为日期时间值返回,并让任何将该值显示给最终用户(网站,客户端应用程序) ,报告等)做格式化。如果您在查询中对其进行格式化,那么您将返回一个字符串,这将使将来更换前端格式变得更加困难。如果您想在SQL中执行此操作 - 请查看上面链接中的格式107。
答案 2 :(得分:1)
没有汗,只是CONVERT它。样式“112”,或ISO将处理您的示例案例。
SELECT CONVERT(datetime,'20060508',112)
返回
----------------------- 2006-05-08 00:00:00.000
(1 row(s) affected)
答案 3 :(得分:1)
尝试:
SELECT REPLACE(CONVERT(varchar(30),CONVERT(datetime, '20060508'),107),' 0',' ')
输出:
-------------------
May 8, 2006
(1 row(s) affected)