Una possibilità potrebbe essere quella di utilizzare una combinazione di Charindex
e Substring
. Nota il seguente 100
dovrà essere dichiarata la lunghezza della colonna - charindex si ferma alla fine della stringa.
Ciò non richiede la parentesi di chiusura, guarda per l'ultima cifra.
with t as (
select * from (values
('ProALPHA - S - HTML Custom Table implementation (E001445)' ),
('IKA CP Implementation (Aus) (E001534-0001)' ),
('Test Engagment Integration: (E001637-0003) Non-billable' ),
('Customer requests customization for Analytics and Java Migration - E000797' ),
('Create list with customers renewing in H2 2020' )
)t(title)
)
select title,
Iif(title like '%E00%',Reverse(Substring(part,patindex('%[0-9]%',part),100)),null)
from t
cross apply (values( Reverse(Substring(t.title, CharIndex('E00',t.title), 100 )) ))x(part)
Esempio Di Violino
Aggiornamento
Si potrebbe implementare il sopra come una colonna calcolata con l'aiuto di una funzione per sostituire l'uso di applicare.
Questo potrebbe essere un bene per il tuo caso, anche se mi consiglia di utilizzare una vista , se possibile.
create function dbo.E00_Part(@title varchar(100))
returns varchar(100)
as
begin
return (select Reverse(Substring(@title, CharIndex('E00',@title), 100 )))
end
create table T (title varchar(100),
Computed as Iif(title like '%E00%',
Reverse(Substring(dbo.E00_Part(title),patindex('%[0-9]%',dbo.E00_Part(title)),100)),null))
Vedi demo violino 2