Вот несколько способов, которыми вы можете это сделать:
WITH sample_data AS (SELECT 'a, b, c, d' str FROM dual UNION ALL
SELECT 'e, f, g, h, i, j' str FROM dual UNION ALL
SELECT 'e, f, g, h, i, jk' str FROM dual UNION ALL
SELECT 'e,f,g,h,i,jk' str FROM dual UNION ALL
SELECT 'e,f,g,h,i,' str FROM dual UNION ALL
SELECT 'e, f, g, h, i,' str FROM dual)
SELECT str,
ltrim(SUBSTR(str, INSTR(str, ',', -1, 1) + 1)) last_item1,
regexp_substr(str, '.*, ?([^,]*$)', 1, 1, NULL, 1) last_item3
FROM sample_data;
STR LAST_ITEM1 LAST_ITEM3
----------------- ----------------- -----------------
a, b, c, d d d
e, f, g, h, i, j j j
e, f, g, h, i, jk jk jk
e,f,g,h,i,jk jk jk
e,f,g,h,i,
e, f, g, h, i,
Это жеребьевка между обоими вариантами относительно того, какой из них будет наиболее производительным и / или удобным в обслуживании в вашей системе - вам нужно это проверить.
Приведенное выше решение regexp_substr проверяет шаблон любого символа (кроме новой строки), за которым следует запятая, затем пробел (или нет) и, наконец, любой символ, который не является запятой, до конца строки. Затем мы выводим 1-е подвыражение (которое определяется заключенной в скобки частью шаблона).
Я включил ltrim в элемент substr/instr, поскольку вы сказали, что ваш разделитель — запятая, но, похоже, это была запятая + пробел.
person
Boneist
schedule
17.02.2017
' d'
(строка длины два: пробел и буква d). - person mathguy   schedule 17.02.2017regexp_substr
и других функций, но это не имеет отношения к базе данных Oracle. Документацияregexp_substr
для стандартного Oracle SQL не допускает отрицательной позиции. - person mathguy   schedule 17.02.2017