Регулярное выражение 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
согласно комментариям, вы можете сделать еще одну проверку с помощью CASE
выражение:
select case when charindex('.', url, charindex('.', url)+ 1) > 0
then stuff(url ,1,charindex('.', url),'')
else url
end newUrl
from t
или если вам нужно проверить первые 3 символа для www;
select case when left(url,3) = 'www'
then stuff(url ,1,charindex('.', url),'')
else url
end newUrl
from t