T-SQL正则表达式替换

时间:2014-01-07 13:18:52

标签: sql sql-server regex tsql

我需要在SQL server中替换字符串。我知道t-sql并不完全支持这种正则表达式替换功能,但我们可以使用PATINDEX这样的函数来做到这一点。

基本上,我需要的是用 www www [0-9] 替换一串URL开头,例如:

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

我试过了PATINDEX('(www[0-9]?)\.%',@url),但它与我需要的不符。有没有人知道如何在没有功能CLR的情况下简单地做到这一点?

2 个答案:

答案 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