Bir seçenek, aşağıdakilerin bir kombinasyonunu kullanmak olacaktır Charindex
ve Substring
. Aşağıdakilere dikkat edin 100
sadece sütunun bildirilen uzunluğu olmalıdır-charındex her zaman dizenin sonunda duracaktır.
Bu, parantezin bitmesini gerektirmez, son rakamı arar.
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)
Örnek Keman
Güncelleme
Yukarıdakileri, apply kullanımını değiştirmek için bir işlev yardımıyla hesaplanmış bir sütun olarak uygulayabilirsiniz.
Bu, kullanım durumunuz için iyi olabilir, ancak mümkünse bir görünüm kullanmanızı tavsiye ederim.
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))
Bakın demo keman 2