Как я могу искать по месяцам и годам в SQL Server 2012? - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь написать запрос для поиска только по месяцам и годам. Что я сделал, так это поиск месяца. Может кто-нибудь сказать, как я могу изменить этот запрос для поиска по месяцу и году, например: 5/2019 или 5-2019?

select firstname, lastname, date  
from tblInfo 
where data = 02/2019

Ответы [ 3 ]

1 голос
/ 30 мая 2019

Вы можете использовать функции MONTH и YEAR из T-SQL:

SELECT firstname, lastname , date FROM tblInfo 
   WHERE MONTH(date) = 2 AND YEAR(date) = 2019
1 голос
/ 30 мая 2019

Поиск интервала между первым днем ​​месяца включительно и первым днем ​​следующего месяца, исключая.

SELECT firstname,
       lastname,
       date  
       FROM tblInfo 
       WHERE data >= '2019-02-01'
             AND data < '2019-03-01';

Это имеет преимущество перед решениями с datepart() или year() и month() что он может использовать индекс на data, если он есть, и, следовательно, лучше выполнять (путь) в этом случае.

Используя левый открытый интервал вместо закрытого (используя BETWEEN спервый и последний день месяца) также имеет то преимущество, что оно также будет работать, если у data есть часть времени.Если такая дата / время указываются после последнего дня месяца в 00:00, но до первого дня следующего месяца (в 00:00), то для произвольной точности долей времени они будут включены.

0 голосов
/ 30 мая 2019

Сравните DATEPART даты с вашей константой / переменной, например:

... WHERE DATEPART(yy,tbleInfoAwareness.date) = 2019 AND DATEPART(mm,tbleInfoAwareness.date) = 5

Другой метод - сравнение диапазона дат - лучше, потому что может использовать индекс:

.... WHERE tbleInfoAwareness.date BETWEEN '2019-05-01` AND '2019-05-31 23:59:59'

PS: добавлено время за последний день.

...