Что означает число в этом утверждении: DATEDIFF (wk, 6, '2020-01-03'); - PullRequest
1 голос
/ 14 января 2020

Документация гласит

DATEDIFF(interval, date1, date2);  

Я не могу найти никакой информации о том, что означает число там.

Ответы [ 4 ]

0 голосов
/ 14 января 2020

Устаревший тип данных datetime сохраняется как два 32-битных целых числа, соединенных вместе.

Одно целое число - это смещение в днях от базовой даты 1 января 1900 года, другое целое число - это число тиков для компонента времени.

Точно так же SQL Сервер долго разрешал приводить между типами чисел c и датой / временем, которые соответствуют этой схеме. Целое число 0 приводится, например, к понедельнику 1900-01-01 и 6 к воскресенью 1900-01-07.

Когда вы звоните DATEDIFF и передаете целое число как одно из последних 2 параметры, которые он неявным образом приводится к DATETIME, аналогичны DATEDIFF(wk, {d '1900-01-07'}, date_under_test}.

Хотя вывод этого выражения сам по себе, вероятно, не интересен, его можно использовать для группировки значений, относящихся к той же неделе ( начиная с воскресенья) вместе или в сочетании с DATEADD, чтобы добавить это количество недель плюс одну обратно к дате привязки, чтобы в следующее воскресенье набрать date_under_test или аналогичное значение.

0 голосов
/ 14 января 2020

В этом утверждении говорится, что недельная разница:

DATEDIFF(wk, 6, '2020-01-03')

6 будет 1900-01-07

Таким образом, вы получите недельную разницу для '1900-01-07' & '2020-01-03'

Если вы передадите числовое значение c, оно будет считаться числом дней (добавляется в дату по умолчанию 1900-01-01)

Например, если у вас есть числовое значение c 1

select convert(datetime, 1)

Вы получите 1900-01-02 00:00:00.000, учитывая дату по умолчанию 1900-01-01

0 голосов
/ 14 января 2020

Я считаю, что код

SELECT DATEDIFF(WK, 6 , '20200103')

фактически начинается с этой даты:

'1900-01-01 00: 00: 00.000'

Затем к 6 добавляется 6 дней к этой дате, что делает его седьмым января.

SELECT DATEDIFF(WK, '19000107', '20200103')

Выполнение этих двух выборов приведет к тому же результату.

0 голосов
/ 14 января 2020

Это будет означать, что дата «6». Если вы запустите:

select convert(datetime,  6)

Вы получите значение.

Чаще всего, я думаю, это означает, что запись кода предназначена DATEADD(), а не DATEDIFF().

...