DATEDIFF 用数字代替日期

DATEDIFF with a number instead of a date

我在尝试理解 DATEDIFF 的工作原理时遇到了一些问题。在某些情况下,我看到一个 int 参数而不是有效日期,如下例所示:

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

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

在这种情况下,6号是如何处理的?这是什么意思?

谢谢!

这是implict data type conversion. DATEDIFF()的例子,允许datetime作为参数类型,所以6隐式转换为datetimeDATEADD()转换01900-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');

如果只为日期数据类型变量赋值时间值,DATEDIFF 会将缺失日期部分的值设置为默认值:1900-01-01。 所以,下面的片段 returns 119 ( 6 = 7th January 1990 )

SELECT DATEDIFF(year, '1900/01/07', '2019/05/15');