SELECT REPLACE('ABCTemplate1', 'Template\d+', '');
SELECT REPLACE('ABC_XYZTemplate21', 'Template\d+', '');
我試圖從字符串中刪除後跟n個數字的部分Template
。結果應該是REPLACE函數中的正則表達式模式
ABC
ABC_XYZ
但是,REPLACE無法讀取正則表達式。我正在使用SQLSERVER 2008.我在這裏做錯了什麼?有什麼建議麼?
SELECT REPLACE('ABCTemplate1', 'Template\d+', '');
SELECT REPLACE('ABC_XYZTemplate21', 'Template\d+', '');
我試圖從字符串中刪除後跟n個數字的部分Template
。結果應該是REPLACE函數中的正則表達式模式
ABC
ABC_XYZ
但是,REPLACE無法讀取正則表達式。我正在使用SQLSERVER 2008.我在這裏做錯了什麼?有什麼建議麼?
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
如果要查找的模式是固定的,則可以使用substring
與charindex
或patindex
。
使用數字表..
;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
select SUBSTRING('ABCTemplate1',1, CHARINDEX ('Template' ,'ABCTemplate1')-1)
我的回答預計,「模板」是足夠的,以確定削減字符串:[?正則表達式SQL內側的圖案更換功能]
select LEFT('ABCTemplate1', CHARINDEX('Template', 'ABCTemplate1') - 1)
的
可能的複製(http://stackoverflow.com/questions/21378193/regex-pattern-inside-sql-replace-function) – Siyual
所有模板之後呢? –
是@alex。包括單詞「模板」在內的所有內容,以及之後的所有內容(只能是數字)。 – SohamC