У меня есть следующая таблица A:
id
----
1
2
12
123
1234
Мне нужно оставить id
значения с нулями:
id
----
0001
0002
0012
0123
1234
Как я могу этого добиться?
Я считаю, что это может быть то, что вы ищете:
SELECT padded_id = REPLACE(STR(id, 4), SPACE(1), '0')
FROM tableA
или
SELECT REPLACE(STR(id, 4), SPACE(1), '0') AS [padded_id]
FROM tableA
Я не тестировал синтаксис во втором примере. Я не уверен, работает ли это на 100% - это может потребовать некоторой настройки - но он передает общее представление о том, как получить желаемый результат.
РЕДАКТИРОВАТЬ
Чтобы решить проблемы, перечисленные в комментариях ...
@ pkr298 - Да STR работает только с числами ... Поле OP - это идентификатор ... следовательно, только номер.
@Desolator - Конечно, это не сработает ... Первый параметр состоит из 6 символов. Вы можете сделать что-то вроде:
SELECT REPLACE(STR(id,
(SELECT LEN(MAX(id)) + 4 FROM tableA)), SPACE(1), '0') AS [padded_id] FROM tableA
теоретически это должно перемещать стойки ворот ... по мере того, как число становится больше, он должен ВСЕГДА работать ... независимо от того, 1 это или 123456789 ...
Итак, если ваше максимальное значение равно 123456 ... вы увидите 0000123456, а если ваше минимальное значение равно 1, вы увидите 0000000001
STR(123456, 4)
, вернет****
SQL Server теперь поддерживает функцию FORMAT, начиная с версии 2012, поэтому:
сделает свое дело.
Если ваш идентификатор или столбец находится в
varchar
и представляет число, которое вы сначала конвертируете:источник
Результат
источник
Старый пост, но, возможно, это кому-то поможет:
Для завершения, пока не останется 4 непустых символа:
Для завершения до 10:
Если столбец числовой , сначала преобразуйте его в varchar с помощью такого кода:
И заполнить до 10 числовым полем:
источник
Попробуй это:
источник
- Пожалуйста, изучите это.
- Надеюсь, это поможет вам
источник
Это работает для строк, целых и числовых:
SELECT CONCAT(REPLICATE('0', 4 - LEN(id)), id)
Где
4
желаемая длина. Работает для чисел, состоящих более чем из 4 цифр, возвращает пустую строку приNULL
значении.источник
Если кому-то все еще интересно, я нашел эту статью в DATABASE.GUIDE:
Left Padding в SQL Server - 3 эквивалента LPAD ()
Короче говоря, в этой статье упомянуты 3 метода.
Допустим, ваш id = 12, и вам нужно, чтобы он отображался как 0012.
Метод 1. Использование функции RIGHT ()
Первый метод использует функцию RIGHT () для возврата только самой правой части строки после добавления некоторых ведущих нулей.
SELECT RIGHT('00' + '12', 4);
Результат:
0012
Метод 2 - Используйте комбинацию RIGHT () и REPLICATE ().
Этот метод почти такой же, как и предыдущий, с той лишь разницей, что я просто заменяю три нуля функцией REPLICATE ():
SELECT RIGHT(REPLICATE('0', 2) + '12', 4);
Результат:
0012
Метод 3 - Используйте комбинацию REPLACE () и STR ().
Этот метод основан на совершенно другом ракурсе по сравнению с предыдущими методами:
SELECT REPLACE(STR('12', 4),' ','0');
Результат:
0012
Ознакомьтесь со статьей, там более подробный анализ с примерами.
источник
Это то, что я обычно использую, когда мне нужно заполнить значение.
источник
Мне это нужно в функции на SQL-сервере, и я немного скорректировал ответ Патрика.
источник
Создать функцию:
Пример:
источник
SELECT @var = LTRIM(RTRIM(@Text))
Я создал функцию:
Использование: выберите dbo.fnPadLeft (123, 10)
Возврат: 0000000123
источник
Что-то достаточно совместимое с ODBC, если необходимо, может быть следующее:
Это основано на том факте, что количество цифр для числа с основанием 10 можно найти по интегральной составляющей его журнала. Из этого мы можем вычесть это из желаемой ширины отступа. Repeat вернется
null
для значений меньше 1, так что нам нужноifnull
.источник
Мое решение неэффективно, но помогло мне в ситуации, когда значения (номера банковских чеков и номера банковских переводов) хранились как varchar, где некоторые записи имели буквенно-цифровые значения с ними, и мне приходилось дополнять их, если длина меньше 6 символов.
Хотел поделиться, если кто-то столкнется с такой же ситуацией
источник
Простой пример:
источник
Я создал для этого функцию, в которой вы можете указать желаемую длину выходного символа:
Примеры результатов
источник
Более эффективный способ:
источник