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
隐式转换为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');
如果只为日期数据类型变量赋值时间值,DATEDIFF 会将缺失日期部分的值设置为默认值:1900-01-01。
所以,下面的片段 returns 119 ( 6 = 7th January 1990 )
SELECT DATEDIFF(year, '1900/01/07', '2019/05/15');
我在尝试理解 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
隐式转换为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');
如果只为日期数据类型变量赋值时间值,DATEDIFF 会将缺失日期部分的值设置为默认值:1900-01-01。 所以,下面的片段 returns 119 ( 6 = 7th January 1990 )
SELECT DATEDIFF(year, '1900/01/07', '2019/05/15');