Какой самый простой / лучший способ удалить подстроки в конце строки? - PullRequest
1 голос
/ 08 декабря 2010

У меня есть функция, которая нормализует адреса.Теперь я хотел бы удалить все строки в ограниченном указанном списке, если они встречаются в конце строки.Скажем, строки, которые я хочу удалить, это «st», «ave», «rd», «dr», «ct» ... Если строка заканчивается любой из этих строк, я хочу удалить их.Каков наилучший способ сделать это, используя T-SQL (это не будет частью оператора select)?

Edit:

Это функция, которая принимает один адрес и форматирует его.Я хотел бы указать код и список, но самым простым способом.Например, какой-то код, с которым я играл, выглядит так:

if @address LIKE '%st'
 SET @address = substring(@address, 1, PatIndex('%st', @address) - 1)

Это хороший метод?Как я могу поместить его в какой-то цикл, чтобы я мог повторить этот код с другими значениями (кроме st)?

Ответы [ 2 ]

1 голос
/ 08 декабря 2010

Добавление значений для обрезки в новую таблицу позволяет

  • легко добавлять новые значения
  • использовать эту таблицу для очистки адресов

Оператор SQL

DECLARE @Input VARCHAR(32)
SET @Input = 'Streetsstaverddrad'

DECLARE @Trim TABLE (Value VARCHAR(32))

INSERT INTO @Trim
SELECT 'st'
UNION ALL SELECT 'ave'
UNION ALL SELECT 'rd'
UNION ALL SELECT 'dr'
UNION ALL SELECT 'ad'

WHILE EXISTS (
  SELECT  * 
  FROM    (
            SELECT  [Adres] = @Input
           ) i 
           INNER JOIN @Trim t ON i.Adres LIKE '%' + t.Value
  )
BEGIN
  SELECT  @Input = SUBSTRING(Adres, 1, LEN(Adres) - LEN(t.Value))
  FROM    (
            SELECT  [Adres] = @Input
          ) i
          INNER JOIN @Trim t ON i.Adres LIKE '%' + t.Value
END          

SELECT @Input
0 голосов
/ 08 декабря 2010

В SQL Server 2005 можно определить пользовательскую функцию, которая включает сопоставление регулярного выражения . Вам нужно определить функцию, которая удаляет завершающие строки. RegEx для соответствия сценариям, которые вы упоминаете, будет что-то вроде ...

\s+(ave|rd|dr|ct)\s*$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...