2016-01-07 5 views
-2

У меня есть данные, как это я видел функцию и подстроку и влево, вправо и , но это не служит своей целикак выбрать только последнюю строку

declare @t table (val varchar(50)) 
INSERT INTO @t(val)values ('E-001GHDEM120ENDORSEMENT'), 
('E-001GHDEM120Renewal'), 
    ('E-001GHDEM120Adjustment'), 
    ('E-001GHDEM120ENDORSEMENT') 
select * from @t 

выход

ENDORSEMENT 
Renewal 
Adjustment 
ENDORSEMENT 

Мне нужно использовать этот оператор, в котором условия для фильтрации записей

+0

Является ли строка "E-001GHDEM120" постоянный один, что происходит перед выходом ...? Если да, я бы предложил функцию substitute() –

+2

Меняет ли модель данных не вариант? Каждый нормальный столбец должен содержать * одно скалярное значение - не много данных, сбитых вместе в строку (что затем вводит проблемы, например, вы видите здесь, когда теперь вы хотите извлечь * один * из значений обратно) –

+0

'подстрока (val, 14, 36) 'не работает? – shawnt00

ответ

0

Попробуйте выбрать

DECLARE @t TABLE 
       (
       val VARCHAR(50) 
       ); 
INSERT INTO @t 
       (val 
      ) 
VALUES 
     ('E-001GHDEM120ENDORSEMENT' 
     ), 
     ('E-001GHDEM120Renewal' 
     ), 
     ('E-001GHDEM120Adjustment' 
     ), 
     ('E-001GHDEM120ENDORSEMENT' 
     ); 
SELECT REVERSE(SUBSTRING(REVERSE(val), 0, PATINDEX('%[^a-zA-Z]%', REVERSE(val)))) AS val 
FROM @t; 
0

Попробуйте это. Из вашего примера вот что я понял.

select right(val,patindex('%[0-9]%', reverse(val))-1) 
from @t 
Смежные вопросы