我试图找出一个优雅的方式来获得有这样的“年月日”的数据文本列的日期......所以我们可能会看到“20060508”作为列中的值,我想能够从查询的日期(2006年5月8日)返回。
我敢肯定我能砍东西一起给予足够的时间,但我想的办法似乎很缺憾,我怀疑有一种方法这可以在一个单一的查询中优雅的完成。
有什么建议?
我试图找出一个优雅的方式来获得有这样的“年月日”的数据文本列的日期......所以我们可能会看到“20060508”作为列中的值,我想能够从查询的日期(2006年5月8日)返回。
我敢肯定我能砍东西一起给予足够的时间,但我想的办法似乎很缺憾,我怀疑有一种方法这可以在一个单一的查询中优雅的完成。
有什么建议?
这已经是一个有效的日期 - ISO-8601格式 - 只需使用:
SELECT CAST('20060508' AS DATETIME)
或可替换地:
SELECT CONVERT(DATETIME, '20060508', 112)
而且应该做的很好!
为了得到你的“5月08,2006”显示,另做转换为VARCHAR,使用日期转换风格107:
SELECT CONVERT(VARCHAR(25), CAST('2006-05-08' AS DATETIME), 107)
见这里的更多信息,铸造和在MS SQL转换
select cast('20060508' as datetime) AS MyDate
为您提供了这样的结果?
MyDate
-----------------------
2006-05-08 00:00:00.000
见这里关于铸造及在MS SQL转换的更多信息。
如果你想达到一个特定的格式(2006年5月8日) - 你应该考虑只返回列datetime值,并让你的心里去,以显示该值向最终用户(网站,客户端应用程序,报告,等等)做的格式。 如果您在查询格式化,你会返回一个字符串,这将使其难以从您在未来的前端换出格式。 如果你想这样做的SQL - 在上面的链接检查出的格式107。
无汗,只是CONVERT它。 式“112”,或ISO会处理你的情况为例。
SELECT CONVERT(datetime,'20060508',112)
回报
----------------------- 2006-05-08 00:00:00.000
(1 row(s) affected)
尝试:
SELECT REPLACE(CONVERT(varchar(30),CONVERT(datetime, '20060508'),107),' 0',' ')
输出:
-------------------
May 8, 2006
(1 row(s) affected)