Мне было поручено установить контрольный номер на основе месяца и даты, которые передаются в хранимую процедуру.Я пропускаю месяц и год, но мне нужно добавить месяц, чтобы 1-9 отображались как 01-09, так как количество символов должно оставаться неизменным для импорта.Мой результат должен дать Z_0 + месяц + год в виде 9-символьного поля, например Z_0201901 за январь 2019 года.
Я использовал этот пост Как я могу получить номер месяца (не название месяца) из датыв SQL Server? , чтобы дополнить 0 в месяц.В частности, SELECT RIGHT('00' + RTRIM( CAST( DATEPART( MONTH, GETDATE() ) AS varchar(2)) ) , 2)
.
Мои проблемы заключаются в том, что я каким-то образом вставляю пробел, когда объединяю месяц и год, даже если каждая переменная в отдельности НЕ содержит пробел.
Учтите:
DECLARE @Mon char(3),
@Year char(6)
SET @Mon = '5'
SET @Year = '2019'
SET @Mon = RIGHT('00' + RTRIM(CAST(@Mon as varchar(2))), 2)
SET @Year = RIGHT('00' + RTRIM(CAST(@Year AS varchar(4))), 5)
SELECT @Year
SELECT @Mon
SELECT @Year+@Mon
SELECT 'Z_' + @Year + @Mon ;
Ожидаемый результат: я получу Z_0201905
, но получу Z_02019 05
.Первоначально я думал, что это потому, что я объявил @Mon как char (3), но даже изменив его на char (2), ведет себя так же.Изменение @Year на char (5) и добавление 0 к SELECT 'Z_0' + @Year + @Mon;
дает тот же результат.Установка для переменной @Mon значения, превышающего 9, например, 12, все равно дает тот же результат, что и пробел.
Запуск SELECT @@VERSION
приводит к: Microsoft SQL Server 2008 (SP3) - 10.0.5538.0 (X64) Apr 3 2015 14:50:02 Copyright (c) 1988-2008 Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (VM)
Я пытался использовать CONCAT, нос помощью переполнения стека обнаружил, что функция недоступна до SQL Server 2012.
Что вызывает пространство?Это не имеет никакого смысла для меня.