Извлечь первую числовую часть поля - PullRequest
0 голосов
/ 16 ноября 2011

У меня есть поле базы данных (Postgres 7.4) для адреса

Пример данных

    address            |    zip
-----------------------+-------------+
123 main street        |    12345
-----------------------+-------------+
3 where road           |    12345
-----------------------+-------------+
South 3 where road     |    12345

Запросы

SELECT *
FROM tbl
WHERE zip = 12345
AND address ILIKE '3%'

Я получаю все, но я не хочу 123 главная улица

SELECT *
FROM tbl
WHERE zip = 12345
AND address ILIKE '123%'

Я получаю результаты, которые хочу

У меня вопрос, как мне просто сопоставить числовую часть адреса?

1 Ответ

1 голос
/ 16 ноября 2011

Попробуйте это:

SELECT substring(address, '^\\d+') AS heading_number
FROM   tbl
WHERE  zip = 12345
AND    address ILIKE '3%'

Возвращает 1 или более цифр от начала строки.
Оставьте привязку ^, если вы хотите, чтобы первая последовательность цифр в строке вместо последовательности в начале . Пример:

SELECT substring('South 13rd street 3452435 foo', '\\d+');

Читайте о substring () и регулярных выражениях в руководстве.
В более поздних версиях (8.0+) не забудьте использовать для синтаксис escape-строки , например:

SELECT substring('South 13rd street 3452435 foo', E'\\d+');
...