Заявление SQL LIKE по типу DateTime
Как вы выполняете оператор LIKE
в столбце типа DateTime
datatype в SQL Server?
Если я запустил следующий SQL, он возвращает мне все даты с 2009 года.
SELECT * FROM MyTable where CheckDate LIKE '%2009%'
Однако, если мне нужны все даты Oct, Nov и Dec, я ожидаю, что смогу сделать следующее:
SELECT * FROM MyTable where CheckDate LIKE '%2009-1%'
Но это ничего мне не возвращает!
Я предоставляю пользователю параметр фильтра, в котором они вводят строку даты, и по мере того, как они печатают, я фильтрую данные. Поэтому, если они набирают "20", я бы хотел вернуть все даты с "20" в течение даты (так что это могут быть все даты 2012 года или значение даты, например, 06/20/1999).
Помогает ли кто-нибудь?
Я использую SQL Server 2008.
Спасибо заранее.
Ответы
Ответ 1
Вы можете использовать функцию DATEPART
для извлечения частей дат. Это также должно сделать ваши запросы более ясными о том, чего вы добиваетесь:
SELECT * FROM MyTable
where DATEPART(year,CheckDate)=2009 and
DATEPART(month,CheckDate) between 10 and 12
(Существуют также специально названные функции, такие как MONTH
и YEAR
, но я предпочитаю DATEPART
для согласованности, так как он может обращаться ко всем компонентам datetime
)
Вы должны стараться избегать думать о datetime
как о любом виде строкового формата. Рассмотрение их как строк является одним из самых больших источников ошибок, с которыми мы сталкиваемся.
Ответ 2
Если вам нужно использовать оператор Like
(по какой-то причине), вам нужно преобразовать столбец DateTime
в varchar
.
SELECT *
FROM MyTable
WHERE CONVERT(VARCHAR, CheckDate, 120) LIKE '%2009-1%'
Ответ 3
Вы можете использовать что-то вроде этого:
SELECT *
FROM MyTable
WHERE CheckDate >= '2009-10-01' AND CheckDate < '2010-01-01';