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

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

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

person Phill Pafford    schedule 13.04.2011    source источник
comment
Это для сортировки буквенно-цифровых значений, начинающихся с цифр?   -  person Matthew    schedule 13.04.2011
comment
нет, я хочу вернуть частичный адрес, если он начинается с числового значения, иначе полный адрес   -  person Phill Pafford    schedule 13.04.2011


Ответы (3)


Я не знаю синтаксиса регулярных выражений postgresql, но в большинстве регулярных выражений вы бы написали [0-9]+. Без квантификатора [0-9] соответствует одному символу.

person Justin Morgan    schedule 13.04.2011
comment
Хм, приведи меня к другому синтаксису, +1 - person Phill Pafford; 13.04.2011

У меня нет установки Postgres для тестирования, но что-то вроде этого может сработать:

SELECT substring('123 Main Street' FROM '^[0-9]+')

Это ничего не возвращает, если оно не начинается с числа. Если вы хотите вместо этого вернуть полную строку, это должно работать:

SELECT substring('123 Main Street' FROM '^[0-9]+|.*')

person rmmh    schedule 13.04.2011
comment
одно поле для обоих условий в одном запросе? - person Phill Pafford; 13.04.2011

Может быть, еще не поздно улучшить ответ rmh.

Это работает для меня:

SELECT substring(column_name FROM '[0-9]+') FROM TableName;

В postgresql просто удалите знак вставки для отображения чисел.

если column_name = 'XXXX-0001' результат будет:

0001
person Allan Registos    schedule 24.11.2014