Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从SQL中未格式化的文本解析日期_Sql_Sql Server_Tsql - Fatal编程技术网

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

从SQL中未格式化的文本解析日期,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正试图找到一种优雅的方法,从包含类似“YYYYMMDD”的数据的文本列中获取日期……因此,我们可能会将“20060508”视为列中的一个值,我希望能够从查询返回该值作为日期(2006年5月8日) 我相信只要有足够的时间,我可以一起解决一些问题,但我正在考虑的方法似乎相当笨拙,我怀疑有一种方法可以在一个查询中优雅地完成 有什么建议吗?这已经是一个有效日期-ISO-8601格式-只需使用: SELECT CAST('20060508' AS DATETIME) 或者: SELECT CONVER

我正试图找到一种优雅的方法,从包含类似“YYYYMMDD”的数据的文本列中获取日期……因此,我们可能会将“20060508”视为列中的一个值,我希望能够从查询返回该值作为日期(2006年5月8日)

我相信只要有足够的时间,我可以一起解决一些问题,但我正在考虑的方法似乎相当笨拙,我怀疑有一种方法可以在一个查询中优雅地完成


有什么建议吗?

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

SELECT CAST('20060508' AS DATETIME)
或者:

SELECT CONVERT(DATETIME, '20060508', 112)
那应该很好

为了显示“May 08,2006”,请使用日期转换样式107将另一个转换为varchar:

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日),您应该考虑将列作为日期时间值返回,并让任何将要显示该值的最终用户(网站、客户端应用程序、报表等)进行格式化。如果在查询时对其进行格式化,将返回一个字符串,这将使将来更难从前端交换格式。如果你想用SQL来做这件事,请查看上面链接中的107格式。

不用担心,只要它。样式“112”或ISO将处理您的示例案例

SELECT CONVERT(datetime,'20060508',112)
返回

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

 (1 row(s) affected)
尝试:

输出:

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

(1 row(s) affected)

将日期返回为2006-05-08 00:00:00.000,而不是2006年5月8日是的,强制转换是首选方法,但为了获得特定的样式,您可能有时需要使用带有样式ID的转换。@KM:是的,我只是注意到OP最后不需要DATETIME,而需要特定的字符串表示;更新了我的答案谢谢!我知道这可能更简单,但我不知道有多少!我没有想到这是一个有效的日期格式!实际上,没有……我只是给出了日期/时间字符串作为示例,以描述我希望从输入中得到的日期,以防不清楚。只要有约会,我就没事。非常感谢。我想你的意思是以2006年5月8日的文本格式返回(与日期相反)。不…(这似乎有点混淆,所以我显然没有解释清楚。)我真的想要一个日期…我只是用“2006年5月8日”来解释日期值应该代表什么。显然,我只是把人们弄糊涂了感谢您提供了额外的格式,尽管这不是必需的…我只是提供了输出,以便更好地描述数据的起始格式以及如何正确翻译。只要是日期格式,我就可以处理。谢谢你的链接……这就解释了我在其他答案中看到的数字的神奇之处。
-------------------
May 8, 2006

(1 row(s) affected)