2016-10-19 2 views

ответ

1
select * from tablename where month(columndate)>month(getdate()) and 
year(columndate)>=year(getdate()) 
+0

Но если вы, например, используете этот запрос в октябре 2016 года, он будет учитывать только ноябрь-декабрь 2016 года, ноябрь-декабрь 2017 года, ноябрь-декабрь 2018 года и так далее. Я не думаю, что это было требованием. – Twinkles

0

Попробуйте это:

Select * from table1 WHERE 
    ((DATEPART(MONTH,datesetto) > DATEPART(MONTH,GETDATE()) 
    AND DATEPART(YEAR,datesetto) = DATEPART(YEAR,GETDATE())) 
    OR (DATEPART(YEAR,datesetto) > DATEPART(YEAR,GETDATE()))) 

DATEPART(Month,GETDATE()) предоставит месяц текущего времени е, а затем вы можете сравнить его с Update на datesetto

: выше запрос будет давать данные для любых месяцев больше, чем в текущем месяце и в году любой месяц больше, чем в текущем году.

+0

Это вернет правильный результат, но не будет ли он медленным, потому что он не может использовать индекс по дате? – Twinkles

0
SELECT * FROM table1 
WHERE datesetto >= DATEADD(month, DATEDIFF(month, 0, getdate())+1, 0) 

Объяснение:

  • DATEDIFF(month, 0, getdate()) вычисляет, сколько месяцев прошло с тех пор 1900-01-01.
  • DATEADD(month, DATEDIFF(month, 0, getdate()), 0) возвращает начало этого месяца.
  • DATEADD(month, DATEDIFF(month, 0, getdate())+1, 0) возвращает начало следующего месяца.
Смежные вопросы