REPLACE函数内的正则表达式模式

时间:2016-09-07 13:35:41

标签: sql sql-server regex

SELECT REPLACE('ABCTemplate1', 'Template\d+', '');
SELECT REPLACE('ABC_XYZTemplate21', 'Template\d+', '');

我正在尝试删除部分Template,后跟字符串中的n个数字。结果应该是

ABC
ABC_XYZ

然而REPLACE无法读取正则表达式。我正在使用SQLSERVER 2008.我在这里做错了吗?有什么建议吗?

4 个答案:

答案 0 :(得分:1)

SELECT SUBSTRING('ABCTemplate1', 1, CHARINDEX('Template','ABCTemplate1')-1)

SELECT SUBSTRING('ABC_XYZTemplate21',1,PATINDEX('%Template[0-9]%','ABC_XYZTemplate21')-1)

更一般地说,

SELECT SUBSTRING(column_name,1,PATINDEX('%Template[0-9]%',column_name)-1)
FROM sometable
WHERE PATINDEX('%Template[0-9]%',column_name) > 0

如果要查找的模式是固定的,您可以substringcharindexpatindex一起使用。

答案 1 :(得分:1)

select SUBSTRING('ABCTemplate1',1, CHARINDEX ( 'Template' ,'ABCTemplate1')-1)

答案 2 :(得分:1)

我的回答是“模板”足以确定剪切字符串的位置:

select LEFT('ABCTemplate1', CHARINDEX('Template', 'ABCTemplate1') - 1)

答案 3 :(得分:0)

使用数字表..

;with cte
as
(select 'ABCTemplate1' as string--this can simulate your table column
)
select * from cte  c
cross apply
(
select replace('ABCTemplate1','template'+cast(n as varchar(2)),'') as rplcd
from
numbers
where n<=9
)
b
where c.string<>b.rplcd

使用递归CTE ..

;with cte
as
(
select cast(replace('ABCTemplate21','template','') as varchar(100)) as string,0 as num
union all
select cast(replace(string,cast(num as varchar(2)),'') as varchar(100)),num+1
from cte
where num<=9
)
select top 1 string from cte
order by num desc