DATEDIFF с номером вместо даты - PullRequest
0 голосов
/ 15 мая 2019

У меня возникли проблемы с попыткой понять, как 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 ]

4 голосов
/ 15 мая 2019

Это пример преобразования типа данных implict . 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 голос
/ 15 мая 2019

Если для переменной типа данных даты назначено только значение времени, DATEDIFF устанавливает значение отсутствующей части даты в значение по умолчанию: 1900-01-01. Итак, следующий фрагмент возвращает 119 (6 = 7 января 1990 г.)

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