2016-11-10 3 views
1

Почему DATEDIFF принимает формат yyyymmdd? Разве это не только для формата yyyy-mm-dd?DATEDIFF работает в формате yyyymmdd SQL-сервер

Функция DATEDIFF (datepart, start_date, end_date) работает нормально, когда даты находятся в формате yyyymmdd, например.

DATEDIFF(DAY, 20161201, 20161231); 

It gives answer 30 

и если вы делаете DATEDIFF (DAY, 20161201, 20161231) + 1 - дата окончания инклюзивного

It gives 31 

Спасибо,

Эйден

+3

На самом деле, стандарт SQL Server для даты констант * * является YYYYMMDD, без дефисов , Десятичная версия работает практически со всеми параметрами интернационализации (есть одно исключение). Я предпочитаю версию с переносом, потому что я человек и мне ее легче читать. –

+0

WOW..Это потрясающе ... Спасибо !!! Если вы опубликуете ответ, я пометю его как ответ – Aiden

+1

@GordonLinoff Просто любопытно. Какое единственное исключение? –

ответ

1

Это может быть немного трудно дразнить, но это объясняется в документации, в разделе "Supported String Literal Formats for date".

В этом разделе представлены пять разделов (но последние два являются специфичными для API). Первый раздел зависит от настроек интернационализации и имеет множество разных форматов.

Второй - это формат ISO 8601. Я думаю, что переносимый формат конфликтует с самым последним форматом в первой таблице («yyyy dd mm» без дефиса).

В последнем разделе представлена ​​эта информативная строка «Шесть или восьмизначная строка всегда интерпретируется как ymd». Следовательно, «YYYYMMDD» всегда интерпретируется правильно. Следовательно, это недвусмысленный формат для даты/времени.

Примечание: поскольку функции, которые вы используете, рассчитывают на даты, если целое число работает, то оно преобразуется в дату, используя его строковое представление. Обычно константы даты должны быть в одинарных кавычках.

Смежные вопросы