这看起来很糟糕,但它确实有效。首先反转字符串,找到'/U'(如果没有因为U值在末尾,它仍然可以工作),找到下一个'/',取这两个位置,提取它们之间的子字符串,并反转该值。如果每个字符串有多个U值,这种方法将不起作用。您需要循环执行它。
DECLARE @test1 VARCHAR(100) = 'PRODUCT/100U/PRODUCT/1000A/10000E'
DECLARE @test2 VARCHAR(100) = 'PRODUCT/100000A/PRODUCT/10U'
DECLARE @test3 VARCHAR(100) = 'PRODUCT/ITEM/1000U/PRODUCT/100000000E'
DECLARE @test4 VARCHAR(100) = 'PRODUCT/100000A/PRODUCT/423587U'
SELECT REVERSE(@test1)
SELECT CHARINDEX('/U', REVERSE(@test1))+2
SELECT CHARINDEX('/', REVERSE(@test1), CHARINDEX('/U', REVERSE(@test1))+1)
SELECT SUBSTRING(REVERSE(@test1), CHARINDEX('/U', REVERSE(@test1))+2, CHARINDEX('/', REVERSE(@test1), CHARINDEX('/U', REVERSE(@test1))+1) - CHARINDEX('/U', REVERSE(@test1))-2)
SELECT REVERSE(SUBSTRING(REVERSE(@test1), CHARINDEX('/U', REVERSE(@test1)) +2, CHARINDEX('/', REVERSE(@test1), CHARINDEX('/U', REVERSE(@test1))+1) - CHARINDEX('/U', REVERSE(@test1))-2))
SELECT REVERSE(SUBSTRING(REVERSE(@test1), CHARINDEX('/U', REVERSE(@TEST1)) +2, CHARINDEX('/', REVERSE(@TEST1), CHARINDEX('/U', REVERSE(@TEST1))+1) -CHARINDEX('/U', REVERSE(@TEST1))-2))
SELECT REVERSE(SUBSTRING(REVERSE(@TEST2), CHARINDEX('/U', REVERSE(@TEST2)) +2, CHARINDEX('/', REVERSE(@TEST2), CHARINDEX('/U', REVERSE(@TEST2))+1) -CHARINDEX('/U', REVERSE(@TEST2))-2))
SELECT REVERSE(SUBSTRING(REVERSE(@TEST3), CHARINDEX('/U', REVERSE(@TEST3)) +2, CHARINDEX('/', REVERSE(@TEST3), CHARINDEX('/U', REVERSE(@TEST3))+1) -CHARINDEX('/U', REVERSE(@TEST3))-2))
SELECT REVERSE(SUBSTRING(REVERSE(@TEST4), CHARINDEX('/U', REVERSE(@TEST4)) +2, CHARINDEX('/', REVERSE(@TEST4), CHARINDEX('/U', REVERSE(@TEST4))+1) -CHARINDEX('/U', REVERSE(@TEST4))-2))