DATEDIFF,用数字代替日期

时间:2019-05-15 12:47:24

标签: sql sql-server datediff dateadd

尝试理解DATEDIFF应该如何工作时遇到了一些麻烦。在某些情况下,我看到了int参数而不是有效日期,例如下面的示例:

/* Output is 119 */
SELECT DATEDIFF(year, 6, '2019/05/15');

/* Output is 6.227 */
SELECT DATEDIFF(week, 6, '2019/05/15');

在这种情况下,如何处理数字6?什么意思?

谢谢!

2 个答案:

答案 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');