Фактическая проблема
Если столбец PostNumber
имеет числовой тип, значение 123
будет таким же, как значение 000123
.Начальные нули - это вопрос строковых типов или - в большинстве случаев то, что вам нужно только на уровне представления.
ОБНОВЛЕНИЕ Недостаточно внимательно прочитано ...
В комментарии вы заявили, чтостолбец имеет вид nvarchar(50)
Возможно, что вокруг ваших значений есть пробелы, попробуйте следующее:
set PostNumber=RIGHT('000000'+ISNULL(LTRIM(RTRIM(PostNumber)),''),6)
Проверьте с помощью
SELECT PostNumber,LEN(PostNumber),DATALENGTH(PostNumber) FROM ...
подходов заполнения
Есть несколько подходов, я предпочитаю один с REPLACE
на STR
DECLARE @number INT=34;
SELECT REPLACE(STR(@number,6),' ','0')
Проблема с очень обычным подходом с RIGHT
заключается в том, что он будетвозвращать неверный результат в случаях, когда число превышает количество цифр.
DECLARE @number6 INT=123456;
SELECT REPLACE(STR(@number6,6),' ','0')
,RIGHT('000000'+ISNULL(@number6,''),6);
DECLARE @number7 INT=1234567;
SELECT REPLACE(STR(@number7,6),' ','0')
,RIGHT('000000'+ISNULL(@number7,''),6);
Если честно: мой любимый подход имеет недостатки с отрицательными числами:
DECLARE @numberMinus INT=-15;
SELECT REPLACE(STR(@numberMinus,6),' ','0')
,RIGHT('000000'+ISNULL(@numberMinus,''),6);
Начиная с SQL-Server 2012 существует FORMAT()
SELECT FORMAT(@number,'000000')
Не самый лучший перфомер, но прекрасно работает.