Регулярное выражение T-SQL заменить

мне нужно сделать замену строки в SQL server. Я знаю, что t-sql не полностью поддерживает эту функцию замены регулярных выражений, но мы можем использовать такие функции, как PATINDEX для этого.

в принципе, мне нужно заменить строку URL-адреса на www или www[0-9], например:

  • www.123456.com => 123456.com
  • www2.123456.com => 123456.com

пробовал: PATINDEX('(www[0-9]?).%',@url), но это не соответствует тому, что мне нужно. Кто-нибудь знает, как просто сделать это без функции CLR ?

2 ответов


Вы можете

with t(f) as (
    select 'www.foo.com' union
    select 'www9.bar.com' union
    select 'wwwz.quz.com' union
    select 'mail.xxx.com'
)
select 
    case when patindex('www.%', f) + patindex('www[0-9].%', f) = 0 then f else substring(f, 1 + charindex('.', f), len(f)) end
from t

на

(No column name)
mail.xxx.com
foo.com
bar.com
wwwz.quz.com

можно использовать Stuff() и CharIndex() функции:

Select stuff(url ,1, charindex('.', url), '') newUrl
From t

Скрипка демо 1

согласно комментариям, вы можете сделать еще одну проверку с помощью CASE выражение:

select case when charindex('.', url, charindex('.', url)+ 1) > 0
            then stuff(url ,1,charindex('.', url),'') 
            else url
       end newUrl
from t

Скрипка демо 2

или если вам нужно проверить первые 3 символа для www;

select case when left(url,3) = 'www'
            then stuff(url ,1,charindex('.', url),'') 
            else url
       end newUrl
from t

Скрипка демо 3