Почему DATEDIFF анализирует эти даты как дд / мм / гггг? - PullRequest
0 голосов
/ 14 ноября 2018

Я делаю:

SELECT DATEDIFF(month, Convert(datetime,'01/10/2018',103), 
       Convert(datetime,'30/04/2019',103)) AS 'Month1', 
       DATEDIFF(month, '10/01/2018','04/30/2019') AS 'Months2', 
       DATEDIFF(month, '10/02/2018','05/01/2019') AS 'Months3' 

Пожалуйста, покажите мне, почему он возвращает 6,6,7?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Первые 6 - это разница (в месяцах) между 01/10/2018 (1 октября 2018 года) и 30/04/2019 (4 апреля 2019 года). Вызов CONVERT должен принудительно проанализировать вторую дату, используя формат даты 103 (т. Е. Британский / французский, т. Е. Дд / мм / гггг), что заставляет меня подозревать, что ваша реализация SQL настроена на синтаксический анализ их как какого-то другого формата (например, США: мм / дд / гггг).

Второе число 6 - это разница (в месяцах) между 01.10.2008 (1 октября 2018 года) и 30.04.2009 (30 апреля 2019 года).

7 - это разница (в месяцах) между 10/02/2018 (2 октября 2018 года) и 05/01/2019 (1 мая 2019 года). Тот факт, что эти даты могут быть проанализированы как 10 февраля и 5 января, но это не так, подтверждает, что ваша реализация SQL анализирует даты в формате мм / дд / гггг.

Если вы действительно передаете даты в виде строк, я рекомендую использовать однозначный формат (например, «1 октября 2018 года»), так как это сделает код более понятным и менее хрупким.

0 голосов
/ 14 ноября 2018

здесь формат даты - день, месяц, год

 DATEDIFF(month, Convert(datetime,'01/10/2018',103), 
           Convert(datetime,'30/04/2019',103)) AS 'Month1'

, поэтому разница в 10 месяцев (октябрь) и 4 (апрель) месяца = 6

ниже кодового формата даты - месяц месяца, год

DATEDIFF(month, '10/01/2018','04/30/2019') AS Months2, 

снова разница в 10 (октябрь) и 4 (апрель) месяце составляет 6

, а третий формат даты похож на 2-й

DATEDIFF(month, '10/02/2018','05/01/2019') AS Months3

, поэтому разница между 10(октябрь) 2018 и май (5) 2019 - 7

В результате ваш запрос показывает результат 6,6,7

...