По сравнению с сказать:
REPLICATE(@padchar, @len - LEN(@str)) + @str
sql
sql-server
tsql
Кейд Ру
источник
источник
Ответы:
Это просто неэффективное использование SQL, независимо от того, как вы это делаете.
возможно что-то вроде
где X - ваш символ заполнения, а @n - количество символов в результирующей строке (при условии, что вам нужно заполнение, потому что вы имеете дело с фиксированной длиной).
Но, как я уже сказал, вы должны избегать этого в своей базе данных.
источник
RTRIM(@str)
если это может содержать конечные пробелы.Я знаю, что об этом изначально спрашивали еще в 2008 году, но в SQL Server 2012 были введены некоторые новые функции. Функция FORMAT значительно упрощает заполнение нулями. Он также выполнит преобразование для вас:
Обновить:
Я хотел проверить фактическую эффективность функции FORMAT самостоятельно. Я был очень удивлен, обнаружив, что эффективность была не очень хорошей по сравнению с первоначальным ответом от AlexCuse . Хотя я считаю, что функция FORMAT более чистая, она не очень эффективна с точки зрения времени выполнения. Таблица Tally, которую я использовал, насчитывает 64 000 записей. Престижность Мартину Смиту за указание эффективности времени выполнения.
Время выполнения SQL Server: время ЦП = 2157 мс, прошедшее время = 2696 мс.
Время выполнения SQL Server:
источник
Несколько человек дали версии этого:
будьте осторожны с этим, потому что он будет усекать ваши фактические данные, если они длиннее, чем n.
источник
источник
Возможно, переубитие у меня есть эти UDFs, чтобы дополнить влево и вправо
и направо
источник
Я не уверен, что метод, который вы даете, действительно неэффективен, но альтернативный способ, если он не должен быть гибким по длине или символу заполнения, будет (при условии, что вы хотите дополнить его " От 0 "до 10 символов:
источник
вероятно, перебор, я часто использую этот UDF:
Так что вы можете делать такие вещи, как:
источник
Мне понравилось решение vnRocks, вот оно в виде udf
источник
это простой способ дополнить левую панель:
Где
x
номер пэда иy
его символ.образец:
источник
1
становится001
.источник
В SQL Server 2005 и более поздних версиях для этого можно создать функцию CLR.
источник
Как насчет этого:
3 - число
zeros
колодокисточник
Я надеюсь, что это поможет кому-то.
источник
Я использую это. Это позволяет вам определить длину, которую вы хотите, чтобы результат был, а также символ заполнения по умолчанию, если он не указан. Конечно, вы можете настроить длину ввода и вывода для любых максимумов, с которыми вы сталкиваетесь.
Ваш пробег может варьироваться. :-)
Джои Морган,
главный программист / аналитик I-
подразделения WellPoint Medicaid
источник
Вот мое решение, которое избегает усеченных строк и использует простой старый SQL. Благодаря @AlexCuse , @Kevin и @Sklivvz , решения которых являются основой этого кода.
источник
Я знаю, что это немного добавляет к разговору в данный момент, но я запускаю процедуру генерации файлов, и она идет невероятно медленно. Я использовал дубликат и увидел этот метод обрезки и решил, что я бы попробовал.
Вы можете видеть в моем коде, где переключение между ними является дополнением к новой переменной @padding (и ограничению, которое теперь существует). Я выполнил свою процедуру с функцией в обоих состояниях с одинаковыми результатами во время выполнения. Так что по крайней мере в SQLServer2016 я не вижу никакой разницы в эффективности, которую нашли другие.
В любом случае, вот мой UDF, который я написал несколько лет назад, плюс сегодняшние изменения, которые во многом совпадают с другими, за исключением того, что у него есть опция параметра LEFT / RIGHT и некоторая проверка ошибок.
источник
У меня есть одна функция, которая lpad с x десятичными числами: CREATE FUNCTION [dbo]. [LPAD_DEC] (- Добавьте здесь параметры для функции @pad nvarchar (MAX), @string nvarchar (MAX), @length int, @dec int ) ВОЗВРАЩАЕТСЯ nvarchar (max) КАК НАЧАТЬ - Объявите здесь возвращаемую переменную DECLARE @resp nvarchar (max)
КОНЕЦ
источник
Чтобы обеспечить числовые значения, округленные до двух десятичных разрядов, но при необходимости добавленные справа с нулями, я имею:
Если кто -то может думать о аккуратным образом, что будет оценено - выше кажется неуклюжим .
Примечание : в этом случае я использую SQL Server для отправки отчетов по электронной почте в формате HTML и поэтому хочу отформатировать информацию без привлечения дополнительного инструмента для анализа данных.
источник
Вот как я бы обычно дополнял varchar
источник