Выбрать только числовую часть строка, только если она начинается с числового значения

Это дает мне только последний символ (числовой), но мне нужна целая числовая строка

SELECT substring('123 Main Street' FROM '%#"[0-9]#"%' FOR '#')
  • Результатов: 3
  • Ожидается: 123

Это дает мне те же результаты, но мне нужно, чтобы он возвращал пустое значение:

SELECT substring('Main 123 Street' FROM '%#"[0-9]#"%' FOR '#')
  • Результаты: 3
  • Ожидание:

ПРИМЕЧАНИЕ: Postgres 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
  • По-прежнему необходимо пропустить или вернуть полную строку: 'Main 123 Street'

ОБНОВЛЕНИЕ 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

10
задан Phill Pafford 13 April 2011 в 16:34
поделиться