У меня есть строка длиной до 3 символов, когда она впервые была создана в SQL Server 2008 R2.
Я хотел бы дополнить его начальными нулями, поэтому, если его первоначальное значение было «1», то новое значение будет «001». Или, если его исходное значение было «23», новое значение «023». Или, если его исходное значение равно «124», то новое значение совпадает с исходным значением.
Я использую SQL Server 2008 R2. Как бы я сделал это с помощью T-SQL?
sql-server
tsql
Сунил
источник
источник
Ответы:
Если поле уже является строкой, это будет работать
Если вы хотите, чтобы нули отображались как '000'
Это может быть целое число - тогда вы бы хотели
источник
Хотя вопрос был для SQL Server 2008 R2, в случае, если кто-то читает это с версией 2012 и выше, с тех пор это стало намного проще благодаря использованию FORMAT .
Вы можете передать стандартную строку числового формата или строку пользовательского числового формата в качестве аргумента формата (спасибо Вадиму Овчинникову за эту подсказку).
Для этого вопроса, например, такой код
выходы
источник
Безопасный метод:
Это имеет преимущество в том, что возвращает строку
'***'
для n <0 или n> 999, что является хорошим и очевидным индикатором ввода за пределы. Другие методы, перечисленные здесь, будут молча завершаться ошибкой, обрезая ввод до 3-символьной подстроки.источник
SELECT REPLACE(STR('1',3),' ','0')
Перерывы:SELECT REPLACE(STR('1A',3),' ','0')
. Это просто обожгло меня сегодня, когда пользователь ввел букву во входной строке, и мне не удалось протестировать этот случай.Вот более общий метод для заполнения слева на любую желаемую ширину:
Однако, если вы имеете дело с отрицательными значениями и добавлением начальных нулей, ни этот, ни другой предложенный метод не будут работать. Вы получите что-то похожее на это:
[Вероятно, не то, что вы хотели]
Итак ... вам придется перепрыгивать через некоторые дополнительные скачки. Вот один подход, который будет правильно форматировать отрицательные числа:
Следует отметить, что в
convert()
вызовах должна быть[n]varchar
указана длина, достаточная для удержания преобразованного результата с усечением.источник
Вот вариант ответа Хогана, который я использую в SQL Server Express 2012:
Вместо того, чтобы беспокоиться о том, является ли поле строкой или нет, я просто
CONCAT
это делаю , поскольку она все равно выведет строку. Кроме того, если поле может быть aNULL
,ISNULL
может потребоваться использование, чтобы избежать полученияNULL
результатов функцией .источник
Я всегда находил следующий метод очень полезным.
источник
Используйте эту функцию, которая подходит для любой ситуации.
Образец вывода
источник
DECLARE @NumStr VARCHAR(250) = '2016'; SELECT REPLICATE('0', 12 - LEN(@NumStr)) + @NumStr;
которое возвращает первый пример Салара выше. Спасибо Салар.DECLARE @NumStr VARCHAR(250) = '2016'; SELECT REPLICATE('0', 10 - LEN(@NumStr)) + @NumStr;
который возвращается0000002016
в первом примере выше.Для тех, кто хочет обновить свои существующие данные, вот запрос:
источник
Для целых чисел вы можете использовать неявное преобразование из int в varchar:
источник
Я знаю его старый билет, я просто подумал поделиться им.
Я нашел этот код в поисках решения. Не уверен, что он работает на всех версиях MSSQL, у меня MSSQL 2016.
возвращает «0023». 4 в функции STR - это общая длина, включая значение. В примерах 4, 23 и 123 все будут иметь 4 в STR, и будет добавлено правильное количество нулей. Вы можете увеличить или уменьшить его. Не нужно, чтобы получить длину на 23.
Изменить: я вижу его так же, как @Anon сообщение.
источник
Попробуйте это с фиксированной длиной.
источник
У меня была похожая проблема с целочисленным столбцом в качестве входных данных, когда мне требовался вывод фиксированного размера varchar (или строки). Например, от 1 до «01», от 12 до «12». Этот код работает:
Если вход также является столбцом varchar, вы можете избежать кастинга.
источник
Для более динамичного подхода попробуйте это.
источник
Написал это, потому что у меня были требования до определенной длины (9). Добавляет слева только @pattern, когда ввод нуждается в заполнении. Всегда должен возвращать длину, определенную в @pattern.
Возвращает 1234input
источник
Просто это
Подобно:
источник
Я пришел сюда специально, чтобы выяснить, как можно преобразовать смещение часового пояса в строку часового пояса для преобразования дат в DATETIMEOFFSET в SQL Server 2008. Брутто, но необходимо.
Поэтому мне нужен 1 метод, который справится с отрицательными и положительными числами, отформатировав их в два символа с начальным нулем, если это необходимо. Ответ Anons заставил меня близко, но отрицательные значения часового пояса вышли бы,
0-5
а не требуемый-05
Так что с небольшим изменением в его ответе, это работает для всех часовых преобразований часового пояса
источник
Я создал эту функцию, которая обслуживает bigint и один ведущий ноль или другой одиночный символ (возвращается максимум 20 символов) и учитывает длину результатов, меньшую длины входного числа:
источник