#sql #sql-server #sql-server-2008
#sql #sql-server #sql-server-2008
Вопрос:
Привет, я хочу ввести следующий месяц, SQL server
но что, если месяц 12
. когда у меня будет date = '2016-10-04'
следующий месяц, будет date = '2016-11-04'
.
Я хочу поместить это в этот запрос :
if EXISTS(
select * from month
where id_Prod = @id_Prod
and datepart(month,DATEADD(month,1,_date)) = datepart(month,DATEADD(month,1,_date))
and datepart(YEAR,_date) = datepart(YEAR,@date)
);
Комментарии:
1. что делать, если месяц равен 12. Может быть, вам следует ответить на этот вопрос
2. Укажите, что вы хотите сделать, если месяц равен 12. Сначала четко сформулируйте свои требования.
3. я думаю, следует заменить это: datepart(YEAR,@date) на это: datepart(month,DATEADD(YEAR,1,_date))
4. Удален тег MYSQL, поскольку он кажется совершенно неуместным
5. Итак, в качестве входных данных у вас есть переменная?
@date
содержит произвольную дату, и вы хотите найти любые строки вmonth
таблице со_date
значением столбца, которое встречается в следующем месяце@date
? И если мы в декабре, мы должны предположительно выбрать значения с января следующего года?
Ответ №1:
вы можете попробовать dateadd
declare @dt date = getdate()
select datepart(MM,dateadd(mm,1, @dt))
Ответ №2:
Если спецификация, которую я привел в комментариях, верна, вы хотите что-то вроде:
if EXISTS(
select * from month
where id_Prod = @id_Prod
and _date >= DATEADD(month,DATEDIFF(month,'20010101',@date),'20010201')
and _date < DATEADD(month,DATEDIFF(month,'20010101',@date),'20010301')
);
Пары DATEADD
, DATEDIFF
просто используются для генерации «1-го числа следующего месяца» и «1-го числа следующего месяца», используя произвольные (фиксированные) даты для их вычисления. Например. в первой строке вычисляется, сколько целых месяцев произошло между 1 января 2001 и @date
. Затем он добавляет это количество месяцев к 1 февраля 2001 года. Поэтому это выражение должно всегда генерировать 1-е число следующего месяца @date
. Вторая пара делает то же самое, но вместо этого добавляет вычисленное число к 1 марта.
Вы также должны отметить, что я не применяю никаких функций _date
, поэтому, если в этом столбце есть полезный индекс, он должен использоваться для этого запроса.
Комментарии:
1. спасибо, сэр, но что насчет года, если месяц равен 12
2. @adilzakarya — что из этого? Я вычисляю две даты: одна — «начало следующего месяца», а другая — «начало следующего месяца». Эти вычисления всегда работают. Нам не нужно делать какой-либо специальный корпус для 12-го месяца года, предполагая в этом случае, что вы хотите найти значения в январе следующего года.
3. @adilzakarya — и если это не то, что вы хотите, вы можете рассмотреть возможность редактирования вашего вопроса и попытаться создать более четкую спецификацию. Некоторые примеры данных, ожидаемые входные и выходные данные очень помогли бы.
Ответ №3:
Это кажется довольно простым,
Получить предыдущую дату текущей даты
SELECT DATEADD(MONTH,-1,GETDATE()) AS PrviousDate
Получить следующую дату текущей даты
SELECT DATEADD(MONTH,1,GETDATE()) AS NextDate