Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Phill PaffordОтветов: 3

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

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
  • Это для сортировки буквенно-цифровых значений, начинающихся с цифр? Matthew 13.04.2011
  • нет, я хочу вернуть частичный адрес, если он начинается с числового значения, иначе полный адрес Phill Pafford 13.04.2011

postgresqlsqlregexconditional

Ответы

Ответ 1 · рейтинг 9 · Justin Morgan

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

Ответ 2 · рейтинг 5 · rmmh

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

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

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

Ответ 3 · рейтинг 4 · Allan Registos

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

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

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

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

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

0001

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы