我需要在SQL server中替换字符串。我知道t-sql并不完全支持这种正则表达式替换功能,但我们可以使用PATINDEX
这样的函数来做到这一点。
基本上,我需要的是用 www 或 www [0-9] 替换一串URL开头,例如:
我试过了PATINDEX('(www[0-9]?)\.%',@url)
,但它与我需要的不符。有没有人知道如何在没有功能CLR的情况下简单地做到这一点?
答案 0 :(得分:8)
你可以
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
答案 1 :(得分:2)
您可以使用Stuff()
和CharIndex()
功能:
Select stuff(url ,1, charindex('.', url), '') newUrl
From t
<强> Fiddle demo 1 强>
根据评论,您可以使用CASE
表达式进行另一项检查:
select case when charindex('.', url, charindex('.', url)+ 1) > 0
then stuff(url ,1,charindex('.', url),'')
else url
end newUrl
from t
<强> Fiddle demo 2 强>
或者,如果您需要检查www;
的前3个字符select case when left(url,3) = 'www'
then stuff(url ,1,charindex('.', url),'')
else url
end newUrl
from t
<强> Fiddle demo 3 强>