Поиск по дню-месяцу в datetime без non-sargable

Рейтинг: 1Ответов: 0Опубликовано: 02.05.2023

Допустим, у нас есть таблица TABLE, содержащая поле BDATE типа datetime , куда записаны даты рождения клиентов. По этому полю создан некластерный индекс.

Мне нужно найти тех, у кого сегодня день рождения.

DECLARE @DAY INT  = DAY( GETDATE()) 
DECLARE @MONTH INT = MONTH( GETDATE())

SELECT T.*
FROM TABLE AST
WHERE MONTH(T.BDATE) = @MONTH AND DAY(T.BDATE) = @DAY

Приведённый код скатится с индекс скан за счёт того, что я беру функцию от индексированного столбца.

При этом, не брать их как будто бы нельзя, тк нас интересует совпадение дня-месяца, а не полной даты (т.е. если у человека дата рождения 01.01.1991 мы не сможем определить его как именнинника, просто взяв getdate() поскольку получим актульный год)

Подскажите, пожалуйста, как решить эту проблему?

p.s. MS SQL SERVER

p.s.s. я предполагаю, что такие задачи должны прогнозироватсья на этапе создания таблиц и по-хорошему, в таблице должно быть int-поле содержащее код сегодняшнего дня по дате-месяцу. Но мы предполгаем, что так не сделано.

Ответы

Ответов пока нет.