我正在使用 SSMS 2014 在 SQL 服务器上工作
select DATEDIFF(MM, 0, GETDATE())
输出为 1409(运行于 16-06-2017)
我很困惑,因为 DATEDIFF 语法的第二个和第三个参数应该是一个有效的日期,但在这里,当第二个参数为 0 时,该查询如何以及为什么执行并给出结果。
我检查了 ISDATE(0) 和 ISDATE('0') ,它们给出了语法错误,所以如果 0 不是有效日期,那么为什么 DATEDIFF 接受它并给出结果。
该文件规定:
开始日期
是可以解析为时间、日期、smalldatetime、datetime、datetime2 或 datetimeoffset 值的表达式。
虽然有细微的区别,但“可以解决”并不等同于“是类型的”。
因此,整数被解释为自“1899-12-31”以来的天数。但是,即使字符串看起来像数字,也不会将其解释为天数。
ISDATE()
接受一个字符串参数,因此它正在转换0
为'0'
. 并且'0'
不是日期格式。事实上,datediff()
将失败,第二个参数传递为 as'0'
而不是0
。
并且(尽管几乎从未使用过),任何整数都将用作第二个参数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句