2016-09-07 5 views
0
SELECT REPLACE('ABCTemplate1', 'Template\d+', ''); 
SELECT REPLACE('ABC_XYZTemplate21', 'Template\d+', ''); 

Ich versuche, den Teil Template, gefolgt von n Ziffern aus einer Zeichenfolge zu entfernen. Das Ergebnis sollteRegex Muster innerhalb REPLACE Funktion

sein
ABC 
ABC_XYZ 

REPLACE kann Regex jedoch nicht lesen. Ich benutze SQLSERVER 2008. Mache ich hier etwas falsch? Irgendwelche Vorschläge?

+0

Mögliche Duplikat (http://stackoverflow.com/questions/21378193/regex-pattern-inside-sql-replace-function) – Siyual

+0

alles nach der Vorlage? –

+0

Ja @alex. Alles inklusive das Wort 'Template' und was auch immer danach noch geht (es werden nur Ziffern). – SohamC

Antwort

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

oder

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

Allgemeiner

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

Sie können substring mit charindex oder patindex verwenden, wenn das gesuchte Muster festgelegt ist.

0

Mit Zahlen Tisch ..

;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 

rekursive 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 
1
select SUBSTRING('ABCTemplate1',1, CHARINDEX ('Template' ,'ABCTemplate1')-1) 
1

Meine Antwort erwartet, dass „Template“ genug ist, um zu bestimmen, wo die Zeichenfolge zu schneiden: [? RegexMuster innerhalb SQL-Funktion Ersetzen]

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