Мне нужно убедиться, что в данном поле не более одного пробела (меня не беспокоят все пробелы, только пробел) между символами.
Так
'single spaces only'
нужно превратить в
'single spaces only'
Ниже не будет работать
select replace('single spaces only',' ',' ')
поскольку это приведет к
'single spaces only'
Я бы предпочел использовать собственный T-SQL, а не решение на основе CLR.
Мысли?
sql-server
tsql
Кристоф
источник
источник
Ответы:
Еще аккуратнее:
Вывод:
источник
Это сработает:
источник
"release < now"
тогда вы получите"release<><><<><>now"
,"release<<>now"
,"release< now"
, его то же самое с любой парой символов, если у вас есть один один из пары , то она будет двигатьсяЕсли вы знаете, что в строке не будет больше определенного количества пробелов, вы можете просто вложить замену:
4 замены должны исправить до 16 последовательных пробелов (16, затем 8, затем 4, затем 2, затем 1)
Если бы он мог быть значительно длиннее, вам бы пришлось сделать что-то вроде встроенной функции:
Тогда просто сделай
источник
Замена будет работать со всеми двойными пробелами, не нужно вводить несколько замен. Это решение на основе набора.
источник
Это можно сделать рекурсивно с помощью функции:
тогда, например:
возвращает:
Или решение, основанное на методе, описанном @ agdk26 или @Neil Knight (но безопаснее),
оба примера возвращают вывод выше:
или
Как это устроено:
Внимание:
символ / строка, используемый для замены пробелов, не должен существовать в начале или конце строки и быть автономным.
источник
Это несколько грубая сила, но сработает
источник
Вот простая функция, которую я создал для очистки любых пробелов до и после, а также нескольких пробелов в строке. Он изящно обрабатывает до 108 пробелов за один проход и столько же блоков, сколько в строке. Вы можете увеличить это количество раз в 8, добавив дополнительные строки с большими фрагментами пробелов, если вам нужно. Кажется, что он работает быстро и не вызывает никаких проблем, несмотря на его повсеместное использование в большом приложении.
источник
Нашел это, когда искал ответ:
Полный ответ (с объяснением) был взят из: http://techtipsbysatish.blogspot.com/2010/08/sql-server-replace-multiple-spaces-with.html
На второй взгляд кажется, что это немного другая версия выбранного ответа.
источник
Способ # 1
Первый способ - заменить лишние пробелы между словами необычной комбинацией символов в качестве временного маркера. Затем вы можете заменить символы временных маркеров, используя функцию замены, а не цикл.
Вот пример кода, который заменяет текст в строковой переменной.
Тест времени выполнения №1: в десяти запусках этого метода замены среднее время ожидания ответов сервера составило 1,7 миллисекунды, а общее время выполнения - 4,6 миллисекунды. Тест времени выполнения № 2: Среднее время ожидания ответов сервера составляло 1,7 миллисекунды, а общее время выполнения - 3,7 миллисекунды.
Способ # 2
Второй метод не так элегантен, как первый, но также выполняет свою работу. Этот метод работает путем вложения четырех (или, возможно, более) операторов замены, которые заменяют два пробела одним пробелом.
Тест времени выполнения №1: в десяти запусках этого метода замены среднее время ожидания ответов сервера составило 1,9 миллисекунды, а общее время выполнения - 3,8 миллисекунды. Тест времени выполнения № 2: Среднее время ожидания ответов сервера составляло 1,8 миллисекунды, а общее время выполнения - 4,8 миллисекунды.
Способ # 3
Третий метод замены лишних пробелов между словами - использование простого цикла. Вы можете проверить лишние пробелы в цикле while, а затем использовать функцию replace, чтобы уменьшить лишние пробелы при каждой итерации цикла.
Тест времени выполнения №1: в десяти запусках этого метода замены среднее время ожидания ответов сервера составило 1,8 миллисекунды, а общее время выполнения - 3,4 миллисекунды. Тест времени выполнения № 2: Среднее время ожидания ответов сервера составляло 1,9 миллисекунды, а общее время выполнения - 2,8 миллисекунды.
источник
Это решение посредством множественной замены, которое работает для любых строк (не требует специальных символов, которые не являются частью строки).
источник
Я использую решение FOR XML PATH для замены нескольких пробелов на одно.
Идея состоит в том, чтобы заменить пробелы тегами XML. Затем разделить строку XML на фрагменты строки без тегов XML. Наконец, объединить эти строковые значения путем добавления одинарных пробелов между двумя
Вот как может быть вызвана финальная функция UDF
источник
источник
Обычно я использую такой подход:
источник
Просто добавляем еще один метод-
Замена нескольких пробелов одним пробелом БЕЗ использования REPLACE в SQL Server-
источник
Пожалуйста, найдите код ниже
Это сработало для меня .. Надеюсь, это поможет ...
источник
Вы можете попробовать это:
источник
Попробуй это..
источник