я хочу, чтобы получить записи, где поле даты устанавливается на будущие месяцыSQL получить данные, где дата больше текущего месяца
это выглядит правильно
Select * from table1 WHERE
datesetto >MONTH(dateadd(dd, -1, GetDate())))
я хочу, чтобы получить записи, где поле даты устанавливается на будущие месяцыSQL получить данные, где дата больше текущего месяца
это выглядит правильно
Select * from table1 WHERE
datesetto >MONTH(dateadd(dd, -1, GetDate())))
select * from tablename where month(columndate)>month(getdate()) and
year(columndate)>=year(getdate())
Попробуйте это:
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
: выше запрос будет давать данные для любых месяцев больше, чем в текущем месяце и в году любой месяц больше, чем в текущем году.
Это вернет правильный результат, но не будет ли он медленным, потому что он не может использовать индекс по дате? – Twinkles
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)
возвращает начало следующего месяца.
Но если вы, например, используете этот запрос в октябре 2016 года, он будет учитывать только ноябрь-декабрь 2016 года, ноябрь-декабрь 2017 года, ноябрь-декабрь 2018 года и так далее. Я не думаю, что это было требованием. – Twinkles