为什么DATEDIFF将这些日期解析为dd / mm / yyyy?

时间:2018-11-14 02:32:50

标签: sql datediff

我愿意:

SELECT DATEDIFF(month, Convert(datetime,'01/10/2018',103), 
       Convert(datetime,'30/04/2019',103)) AS 'Month1', 
       DATEDIFF(month, '10/01/2018','04/30/2019') AS 'Months2', 
       DATEDIFF(month, '10/02/2018','05/01/2019') AS 'Months3' 

请告诉我为什么它返回6,6,7?

2 个答案:

答案 0 :(得分:0)

此处的日期格式为星期几

 DATEDIFF(month, Convert(datetime,'01/10/2018',103), 
           Convert(datetime,'30/04/2019',103)) AS 'Month1'

所以10个月(10月)和4(4月)月之差= 6

以下代码日期格式为月日年

DATEDIFF(month, '10/01/2018','04/30/2019') AS Months2, 

所以10月(10月)和4月(4月)的时间差也是6

第三个日期格式类似于第二个

DATEDIFF(month, '10/02/2018','05/01/2019') AS Months3

所以2018年10月10日和2019年5月5日之间的差是7

结果您的查询显示输出6,6,7

答案 1 :(得分:0)

前6个是2018年10月10日(2018年10月1日)和2019年4月30日(2019年4月4日)之间的差额(以月为单位)。 CONVERT调用将强制使用日期格式103(即英国/法国,即dd / mm / yyyy)解析第二个日期,这使我怀疑您的SQL实现已设置为将其解析为其他格式(例如美国:mm / dd / yyyy。

第二个6是2018年10月1日(2018年10月1日)与2019年4月30日(2019年4月30日)之间的差异(以月为单位)。

7是10/02/2018(2018年10月2日)和05/01/2019(2019年5月1日)之间的差异(以月为单位)。这些日期可以可以解析为2月10日和1月5日,但事实并非如此,这一事实证实了您的SQL实现正在以mm / dd / yyyy格式解析日期。

如果您确实将日期作为字符串传递,我建议使用明确的格式(例如,“ 2018年10月1日”),因为这将使代码更清晰,并且不那么脆弱。