Использование значения даты в предложении where для типа данных datetime - PullRequest
0 голосов
/ 04 июня 2019

Есть ли что-то, с чем я должен быть осторожен при использовании даты в операторе where, если поле, по которому я фильтрую, является datetime? Действительно ли WHERE Date = '20190604' интерпретируется как '2019-06-04 00:00:00'

Запустил несколько запросов, чтобы посмотреть, удаляются ли какие-либо значения в зависимости от различных способов форматирования даты. Не заметил никакой разницы.

SELECT DateField
FROM CalendarTbl
WHERE DateField = '20190604'

Ответы [ 3 ]

4 голосов
/ 04 июня 2019

Если вы передадите строку типа '20190604' в datetime, тогда да, она будет интерпретироваться как дата и время 2019-06-04T00:00:00.000. Это означает, что если у вас есть какие-либо значения, которых нет в полночь, строка не будет возвращена (даже если это значение 2019-06-04T00:00:00.003).

Если у вас есть значения, отличные от полуночи, и вы хотите вернуть все строки для определенной даты, вы можете использовать CONVERT / CAST, чтобы изменить тип данных столбца на date; который все еще SARGable:

SELECT DateField
FROM CalendarTbl
WHERE CONVERT(date,DateField) = '20190604';
1 голос
/ 04 июня 2019

Да, строковый литерал '20190604' всегда будет интерпретироваться SQL Server как yyyymmdd - 2019-06-04. Если вы указываете только дату, время принимается за полночь, поэтому 20190604 эквивалентно 2019-06-04T00:00:00.

Обратите внимание, что если вы используете 2019-06-04 с типом данных DateTime, он по-прежнему зависит от культуры.

Если вы хотите, чтобы все записи на эту конкретную дату, вам нужно добавить еще одно условие:

SELECT DateField
FROM CalendarTbl
WHERE DateField => '20190604'
AND DateField < '20190605'
1 голос
/ 04 июня 2019

Да, это нормально.Ваша строка неявно приводится к нужной дате и времени.Держу пари, что это самый быстрый способ ввода дат человеком.

Проверьте в цветной таблице официальной документации список явных и явных приведений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...