#sql #regex
#sql #регулярное выражение
Вопрос:
Я ищу способ поиска и удаления всего, вплоть до — из приведенных ниже строк. Я пробовал варианты, и ни один из них не работает именно так, как я хочу. Я пытался regex_replace
, но это не уловило их все, и я обнаружил, что создаю отдельные операторы regexp для каждого сценария, что, похоже, ничуть не лучше, чем жесткое кодирование. Я надеюсь, что у кого-то есть решение. Я был бы очень признателен за это.
POLY GON - HOME
POLY-GON-HOME
POLY - GON - HOME
POLY - GON HOME
PG - HOME
PG-HOME
Я хочу показать все после второго дефиса. Итак, HOME
это то, что я хочу отобразить.
Я пытался
regexp_replace(string,A[^-] -[^-] )
но оно удаляет все, кроме второго дефиса. В противном случае это работает.
Комментарии:
1. Покажите, что вы пробовали. Мы поможем вам это исправить, мы не будем писать это за вас.
2. можете ли вы показать, какими должны быть желаемые результаты?
3. Я обновил свой вопрос, чтобы показать, что я хочу отобразить в своем результате, а также то, что я пробовал.
4. Какую СУБД вы используете? SQL-Сервер, Oracle, MySQL?
5.
regexp_replace(string, '^.*-', '')
Ответ №1:
Используйте
SELECT regexp_replace(string, '^.*-', '')
^
соответствует началу строки..*
соответствует любой строке-
соответствует дефису
Поскольку *
является жадным, это сопоставит все до последнего дефиса. Затем оно заменяется пустой строкой.
Ответ №2:
Я думаю что-то вроде:
select regexp_substr(string, '[^-] $')
Это в основном сохраняет последнюю строку символов, которые не являются дефисами.
Не все базы данных, поддерживающие регулярные выражения, поддерживают regexp_substr()
, но у них есть некоторая похожая функция.