#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