Выберите только числовую часть строки, только если она начинается с числового значения - PullRequest
9 голосов
/ 13 апреля 2011

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

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

UPDATE:

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

Ответы [ 3 ]

8 голосов
/ 13 апреля 2011

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

5 голосов
/ 13 апреля 2011

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

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

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

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

4 голосов
/ 24 ноября 2014

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

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

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

В postgresql просто удалите каретку для отображаемых чисел.

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

0001
...