解析来自于SQL格式文本的日期(Parse a date from unformatted text

2019-07-17 18:20发布

我试图找出一个优雅的方式来获得有这样的“年月日”的数据文本列的日期......所以我们可能会看到“20060508”作为列中的值,我想能够从查询的日期(2006年5月8日)返回。

我敢肯定我能砍东西一起给予足够的时间,但我想的办法似乎很缺憾,我怀疑有一种方法这可以在一个单一的查询中优雅的完成。

有什么建议?

Answer 1:

这已经是一个有效的日期 - 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转换



Answer 2:

select cast('20060508' as datetime) AS MyDate

为您提供了这样的结果?

MyDate
-----------------------
2006-05-08 00:00:00.000

见这里关于铸造及在MS SQL转换的更多信息。

如果你想达到一个特定的格式(2006年5月8日) - 你应该考虑只返回列datetime值,并让你的心里去,以显示该值向最终用户(网站,客户端应用程序,报告,等等)做的格式。 如果您在查询格式化,你会返回一个字符串,这将使其难以从您在未来的前端换出格式。 如果你想这样做的SQL - 在上面的链接检查出的格式107。



Answer 3:

无汗,只是CONVERT它。 式“112”,或ISO会处理你的情况为例。

SELECT CONVERT(datetime,'20060508',112)

回报

 ----------------------- 2006-05-08 00:00:00.000

 (1 row(s) affected)


Answer 4:

尝试:

SELECT REPLACE(CONVERT(varchar(30),CONVERT(datetime, '20060508'),107),' 0',' ')

输出:

-------------------
May 8, 2006

(1 row(s) affected)


文章来源: Parse a date from unformatted text in SQL