Заявление 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';