Обновление столбца с использованием двух переменных

#sql-server

#sql-server

Вопрос:

Мой код

 DECLARE @nextYear Integer = 0;
select @nextYear = DATEPART(yy,getdate()) 1

DECLARE @nextMonth DATETIME = GETDATE();
DECLARE @mon integer = 0;
SELECT @mon = MONTH(EOMONTH ( @nextMonth, 1 )) 

update Mytable set
month_of_usage = '@mon/@nextYear' where id = 1
  

Тип данных month_of_usage — varchar .
Мне нужно, чтобы месяц использования был установлен как 11/2021. Этот скрипт предназначен для автоматического заполнения данных за следующий месяц.

Ответ №1:

'@mon/@nextYear' будет означать буквальное строковое значение '@mon/@nextYear' ; не значение @mon / , за которым следует значение , за которым следует значение @nextYear .

Вам необходимо объединить значения:

 UPDATE MyTable
SET month_of_usage = CONCAT(RIGHT(CONCAT('00',@mon),2),'/',@nextYear)
WHERE id = 1;
  

Я также использую RIGHT для создания значения, которое всегда имеет один и тот же формат, MM/yyyy , так как в противном случае вы получите такие значения, как '1/2020' и '10/2020' .

Конечно, это выглядит так, как будто он пытается представить дату, а a varchar — совершенно неправильный тип данных для этого. Например, согласно вашим данным, 01/2020 это раньше 12/1999 . Если вам нужно сохранить данные, связанные с датой, используйте тип данных даты и времени; их 6 на выбор, и по крайней мере один из них будет подходящим.

Ответ №2:

Вы можете попробовать это

 update Mytable set
month_of_usage = Cast(@mon as varchar(10))   '/'   Cast(@nextYear as Varchar(10)) where id = 1