SQL Server: как удалить начальные / конечные не буквенно-цифровые символы из строки? - PullRequest
0 голосов
/ 06 февраля 2019

Я использую SQL Server 2008 и пытаюсь санировать список URL-адресов.

Некоторые существующие примеры текстов:

www.google.com
'www.google.com'
/www.google.com
www.google.com/

В идеале я могу удалить любые начальные / конечныебуквенно-цифровые символы, поэтому четверка выдаст тот же вывод, что и

www.google.com

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Что ж, если вы знаете, что они только в начале и в конце, вы можете сделать:

with t as (
      select *
      from (values ('www.google.com'), ('''www.google.com'''), ('/www.google.com')) v(text)
     )
select t.text, v2.text2
from t cross apply
     (values (stuff(t.text, 1, patindex('%[a-zA-Z0-9]%', t.text) - 1, ''))
     ) v(text1) cross apply
     (values (case when v.text1 like '%[^a-zA-Z0-9]'
                   then stuff(v.text1, len(text) + 1 - patindex('%[a-zA-Z0-9]%', reverse(v.text1)), len(v.text1), '')
                   else v.text1
              end)
     ) v2(text2);

Здесь - это db <> скрипка.

0 голосов
/ 06 февраля 2019

Вы должны быть в состоянии использовать Substring.Расчет длины может быть сложным:

DECLARE @temp TABLE (val varchar(100))
INSERT INTO @temp VALUES
 ('www.google.com'),('''www.google.com'''),('/www.google.com'),('www.google.com/'),('[www.google.com];')

SELECT SUBSTRING(val
                ,PATINDEX('%[a-zA-Z0-9]%', val) --start at position
                ,LEN(val) + 2 - PATINDEX('%[a-zA-Z0-9]%', val) 
                  - PATINDEX('%[a-zA-Z0-9]%', REVERSE(val)) --length of substring
                ) AS [Result]
  FROM @temp

Производительность:

Result
--------------
www.google.com
www.google.com
www.google.com
www.google.com
www.google.com
0 голосов
/ 06 февраля 2019

Почему бы просто не использовать replace()?:

SELECT REPLACE(REPLACE(col, '''', ''), '/', '')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...