MS SQL Как получить следующий месяц, если его декабрь

#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