Это дает мне только последний символ (числовой), но мне нужна вся числовая строка
SELECT substring('123 Main Street' FROM '%#"[0-9]#"%' FOR '#')
- Результатов: 3
- Ожидание: 123
Это дает мне те же результаты, но мне нужно, чтобы он возвращал пустое значение:
SELECT substring('Main 123 Street' FROM '%#"[0-9]#"%' FOR '#')
- Результатов: 3
- Ожидание:
ПРИМЕЧАНИЕ. Постгрес 7.4.
Полезная ссылка: http://www.postgresql.org/docs/7.4/static/functions-matching.html
ОБНОВИТЬ:
SELECT substring('Main 123 Street' FROM '[0-9]+')
SELECT substring('123 Main Street' FROM '[0-9]+')
- Оба теперь возвращаются: 123
- По-прежнему нужно пропустить или вернуть полную строку: «Главная улица 123».
ОБНОВЛЕНИЕ 2:
Почти есть:
Это дает мне результаты, которые я хочу, если они не начинаются с числового значения:
SELECT
COALESCE(substring('Main 123 Street' FROM '[0-9]*') || 'Main 123 Street', ''),
substring('Main 123 Street' FROM '[0-9]*')
Но это дает мне и то, и другое, и мне нужно только второе условие:
SELECT
COALESCE(substring('123 Main Street' FROM '[0-9]*') || '123 Main Street', ''),
substring('123 Main Street' FROM '[0-9]*')
Я ПОНЯЛ!!! Спасибо всем, кто написал:
SELECT CASE
WHEN COALESCE(substring(db_column FROM '[0-9]*'), db_column) != '' THEN COALESCE(substring(db_column FROM '[0-9]*'), db_column)
ELSE db_column
END AS addsress_string
FROM db_table