#sql #regex #postgresql #conditional
#sql #регулярное выражение #postgresql #условные операторы
Вопрос:
Это дает мне только последний символ (числовой), но мне нужна вся числовая строка
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
Комментарии:
1. Это для сортировки буквенно-цифровых значений, которые начинаются с цифр?
2. нет, я хочу вернуть частичный адрес, если он начинается с числового значения, иначе полный адрес
Ответ №1:
Я не знаю синтаксис регулярных выражений postgresql, но в большинстве регулярных выражений вы бы написали [0-9]
. Без квантора [0-9]
соответствует одному символу.
Комментарии:
1. Хм, приведи меня к другому синтаксису, 1
Ответ №2:
У меня нет установки Postgres для тестирования, но что-то вроде этого может сработать:
SELECT substring('123 Main Street' FROM '^[0-9] ')
Это ничего не возвращает, если оно не начинается с числа. Если вы хотите вместо этого вернуть полную строку, это должно сработать:
SELECT substring('123 Main Street' FROM '^[0-9] |.*')
Комментарии:
1. одно поле для обоих условий в одном запросе?
Ответ №3:
Возможно, еще не слишком поздно улучшить ответ rmmh.
Это работает для меня:
SELECT substring(column_name FROM '[0-9] ') FROM TableName;
В postgresql просто удалите курсор, чтобы отображались числа.
если column_name = 'XXXX-0001'
результат будет:
0001