2014-01-07 57 views
6

我需要在SQL Server中替换字符串。我知道t-sql并不完全支持这种正则表达式替换功能,但是我们可以使用诸如PATINDEX这样的函数来完成此功能。T-SQL正则表达式替换

基本上,我需要的是,以取代URL的字符串开始WWWWWW [0-9],例如:

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

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

回答

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 
+0

谢谢,这个工程。 :) –

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

+0

不,这不是我真正需要的,因为不是所有的URL与** WWW开头**,如果url是** abc.com **,我需要保持原样。 –

+0

你可以很容易地使用'Case expression'来做到这一点。 – Kaf