SQL Server fehlt Regex. Sie können CLR-Integration verwenden (bevorzugt, wenn Sie Millionen von Datensätzen haben) oder eine rekursive Abfrage verwenden. Beispiel für rekursive Abfrage mit einigen Testfällen unter:
WITH TestCases AS
(
SELECT * FROM (VALUES
('blabla\tr568\tr1136\tr1704\tr2272-\tr2840\tr3408\tr3976\tr4544\tr5112\tr5680blabla'),
('\tr23SomeText\tr1'),
('bla99bla\tr568\tr1136\tr1704\tr2272-\tr2840\tr3408\tr3976\tr4544\tr5112\tr5680rock'),
(''),
(NULL)) T(Expr)
), Cte AS
(
SELECT 1 R, ROW_NUMBER() OVER (ORDER BY Expr) Rec, CONVERT(varchar(MAX), Expr) Expr
FROM TestCases
UNION ALL
SELECT R+1 R, Rec, CASE
WHEN PATINDEX('%\tr[0-9][0-9][0-9][0-9]%', Expr)>0 THEN STUFF(Expr, PATINDEX('%\tr[0-9][0-9][0-9][0-9]%', Expr), 7, '')
WHEN PATINDEX('%\tr[0-9][0-9][0-9]%', Expr)>0 THEN STUFF(Expr, PATINDEX('%\tr[0-9][0-9][0-9]%', Expr), 6, '')
WHEN PATINDEX('%\tr[0-9][0-9]%', Expr)>0 THEN STUFF(Expr, PATINDEX('%\tr[0-9][0-9]%', Expr), 5, '')
ELSE STUFF(Expr, PATINDEX('%\tr[0-9]%', Expr), 4, '') END
FROM Cte
WHERE PATINDEX('%\tr[0-9]%', Expr)>0
)
SELECT TOP 1 WITH TIES Expr FROM Cte
ORDER BY (ROW_NUMBER() OVER (PARTITION BY Rec ORDER BY R DESC))
Es ergibt:
bla99bla-rock
blabla-blabla
NULL
SomeText
Ihr gewünschtes Ergebnis ist –
Dank nicht klar ist, ist es besser? – gaffcz
Sql-Server unterstützt nur einen sehr kleinen Teil von Regex, siehe https://msdn.microsoft.com/en-us/library/ms179859.aspx – Serg