2017-02-21 2 views
0

У меня есть такая строка $TAOVV*NK_LFE_11029_41586, и я хочу выбрать только 11029, число между _. Я стараюсь сSELECT часть строки

substring([OrderCode],PatIndex('%_[0-9]_%', [OrderCode]),LEN([OrderCode])) 

, но не только извлечь, что number.How я могу определить длину, что изменения, и это не всегда из 5 символов, как в этом примере?

+0

Пожалуйста, только помечать соответствующую СУБД – JohnHC

+0

Всегда перед последним '_'? –

+0

Это между последними 2 _ – filippo

ответ

0

Вам нужно сделать подстроку дважды .. Попробуйте с этим

declare @code nvarchar(100)='$TAOVV*NK_LFE_11029_41586' 
select substring(substring(@code,PatIndex('%_[0-9]_%', @code)+1,LEN(@code)),1,charindex('_',substring(@code,PatIndex('%_[0-9]_%', @code)+1,LEN(@code)))-1) 
+0

это работает !! Большое спасибо! – filippo

+0

не работает с этим текстом: '' $ TAOVV * NK_LFE_11029_41586_41111_7474'', это retreving также '11029' !! –

+0

В первой строке будет выбран первый шаблон '' _ [0-9] _ "', а не второй. Я не знаю, является ли это проблемой для OP. – BigM