Una opción sería el uso de una combinación de Charindex
y Substring
. Nota en el siguiente 100
sólo debe ser declarada, de la longitud de la columna - charindex siempre se detiene al final de la cadena.
Esto no requiere paréntesis final, parece que para el último dígito.
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)
Ejemplo De Violín
Actualización
Usted podría implementar la anterior como una columna calculada con la ayuda de una función de sustituir la utilización de aplicar.
Esto podría estar bien para tu caso de uso, aunque me gustaría recomendar el uso de una vista , si es posible.
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))
Ver la demostración de violín 2