如何在SQL中将21/09/2009转换为2007-09-21 00:00:00.000格式?
SQL日期格式转换:从
21/09/2009到YYYY-MM-DD HH:MI:SS.FFF的正确方法 你的语句有两个核心问题:
- 输入的
21/09/2007是数值除法运算,SQL会先计算21÷9÷2007得到小数,再转换为datetime,这完全偏离了日期字符串的转换逻辑,必须把日期用单引号括起来作为字符串传入。 - 样式
131是**伊斯兰历(Hijri)**的专用格式,不适用于公历日期转换。
正确实现方案(针对SQL Server)
要将'21/09/2009'(日/月/年格式)转换为2009-09-21 00:00:00.000格式,分两步处理:
方法1:基础转换
先用样式103(对应公历DD/MM/YYYY格式)将字符串转为datetime类型,再用样式121(对应YYYY-MM-DD HH:MI:SS.FFF格式)输出:
SELECT CONVERT(varchar, CONVERT(datetime, '21/09/2009', 103), 121)
- 内层
CONVERT(datetime, '21/09/2009', 103):完成字符串到datetime类型的解析 - 外层
CONVERT(varchar, ..., 121):将datetime类型格式化为你需要的字符串样式
方法2:安全转换(推荐)
如果数据中存在无效日期,使用TRY_CONVERT会返回NULL而非报错,避免中断查询:
SELECT TRY_CONVERT(varchar, TRY_CONVERT(datetime, '21/09/2009', 103), 121)
关键注意事项
- 日期字符串必须用单引号包裹,否则会被SQL当作数学运算处理,导致转换结果完全错误。
- 公历日期的
DD/MM/YYYY格式对应样式103,不要混淆为伊斯兰历的131样式。
内容的提问来源于stack exchange,提问作者Pinku
相关产品推荐
相关产品推荐

