我愿意:
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?
答案 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日”),因为这将使代码更清晰,并且不那么脆弱。