2015-12-17 6 views
0

У меня есть таблица со столбцом называется A, который имеет две записи:Как получить подстроку с конца?

a2 2014 weather 
2016 LNT 

Целевая таблица имеет два столбца. Я хочу заполнить один столбец «погодой», «LNT», а другой - «2016», «a2 2014».

Как я могу написать выражение трансформации с использованием substr() и instr() для достижения этого?

+1

Всегда будет содержать эти два значения? Я догадываюсь, что нет. Затем сначала вам нужно определить шаблон в исходных данных? Например, последний столбец не будет содержать пробела, а последнее поле может использоваться как разделитель? Или может быть, что-нибудь после четырех последовательных цифр (2014) будет считаться вторым столбцом? – Samik

ответ

1

Хитрость с instr() заключается в использовании отрицательного смещения, которое начинает отсчет с конца нашей строки. Итак, instr(col1, ' ', -1) найдет последнее место в COL1.

Мое решение использует спецификаторе просто потому, что нам нужно использовать выход из instr() в двух substr() вызовов:

SQL> insert into t42 
    2 with cte as (select A, instr(A, ' ', -1) offset 
    3    from t23) 
    4 select substr(cte.A, 1, cte.offset-1) as c1 
    5   , substr(cte.A, cte.offset+1) as c2 
    6 from cte 
    7/

2 rows created. 

SQL> select * from t42 
    2/

COL1   COL2 
--------------- --------------- 
a2 2014   weather 
2016   LNT 

SQL> 
Смежные вопросы