Более простое решение, которое не требует отдельного рассмотрения для адресов без номера дома, это:
with t (address) as (
select '422 Hickory Str.' from dual union all
select 'One US Bank Plaza' from dual
)
select regexp_substr(address, '\s*([^0-9]*)$', 1, 1, null, 1) as street from t;
Результат выглядит следующим образом:
STREET
-------------------------
Hickory Str.
One US Bank Plaza
Третий аргумент REGEXP_SUBSTR является первый из трех. Это означает начало поиска по первому символу адреса. Второй 1 означает поиск первого появления шаблона поиска. Нуль означает отсутствие специальных модификаторов соответствия (например, нечувствительность к регистру - ничего подобного здесь не требуется). Последний 1 означает «вернуть первую SUBEXPRESSION из шаблона соответствия». Подвыражения являются частями выражения соответствия, заключенного в круглые скобки.
Шаблон соответствия имеет значение $ в конце - значение «якорь в конце строки ввода» ($ означает конец строки). Затем [...] означает соответствие любому из символов в квадратных скобках, но^в [^ ...] меняет его, чтобы он соответствовал любому символу OTHER, чем то, что находится в квадратных скобках. 0-9 означает все символы от 0 до 9; поэтому [^ 0-9] означает соответствие любому символу (-ам) ДРУГИЕ ЧЕМ цифры, а * после этого означает «любое количество таких символов» (от 0 до всего в строке ввода). \ s - это «пустое место» - если в адресе есть пробелы, следующие за возможным номером, вы не хотите, чтобы они включались в начале названия улицы. Подвыражение просто [^ 0-9] * означает нецифровые числа, не считая пробелов перед ними (поскольку \ s * находится за левой скобкой).
Мой пример иллюстрирует потенциальную проблему, хотя - иногда на самом деле адрес имеет в себе «число», но вместо него используется слово вместо использования цифр. То, что я показываю, на самом деле является реальным адресом в моем городе.
Удачи вам!
Может быть, вы обращаетесь не имеют цифр, так счетчик дает 0; можете ли вы отправить пример начальной строки и желаемого вывода? – Aleksej
это было именно оно. когда я добавил предложение, чтобы убедиться, что в строке есть цифры, ошибка исчезла. большое спасибо! – Jenny