尝试理解DATEDIFF应该如何工作时遇到了一些麻烦。在某些情况下,我看到了int参数而不是有效日期,例如下面的示例:
/* Output is 119 */
SELECT DATEDIFF(year, 6, '2019/05/15');
/* Output is 6.227 */
SELECT DATEDIFF(week, 6, '2019/05/15');
在这种情况下,如何处理数字6?什么意思?
谢谢!
答案 0 :(得分:4)
这是implict data type conversion的示例。 DATEDIFF()允许将datetime
作为参数类型,因此6
被隐式转换为datetime
,而DATEADD()
则将0
转换为1900-01-01
。
SELECT DATEDIFF(year, 6, '2019/05/15');
SELECT DATEDIFF(week, 6, '2019/05/15');
实际上是
SELECT DATEDIFF(year, DATEADD(day, 0, 6), '2019/05/15');
SELECT DATEDIFF(week, DATEADD(day, 0, 6), '2019/05/15');
答案 1 :(得分:1)
如果仅将时间值分配给日期数据类型变量,则DATEDIFF会将缺少的日期部分的值设置为默认值:1900-01-01。 因此,以下代码段返回119(6 = 1990年1月7日)
SELECT DATEDIFF(year, '1900/01/07', '2019/05/15');