Как я могу удалить все вхождения и я из строки, используя REGEXP_REPLACE в mysql-10.4.24-MariaDB?

Как удалить все вхождения и I из строки с помощью REGEXP_REPLACE? Пробовал следующее, но это не работает

regexp_replace('123,|4abcd, aaa|,qqq|a', '|,', '', 'g')

Извините, я имел в виду , и |.

Зачем использовать регулярное выражение? Почему бы не просто replace(replace('123,|4abcd, aaa|,qqq|a', '*', ''), '|', '')?

Bohemian 11.01.2023 04:40

потому что regexp_replace принимает список символов, а не пишет отдельную замену для каждого символа.

Karim Ali 11.01.2023 05:01
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Удобно, что | и * теряют свое особое значение внутри класса символов (квадратные скобки):

mysql> select regexp_replace('123*,|4abcd, aaa|,qqq|a', '[|*,]', '') as s;
+------------------+
| s                |
+------------------+
| 1234abcd aaaqqqa |
+------------------+

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

Также последний аргумент, который вы использовали, 'g', не поддерживается и не нужен. Я полагаю, вы думаете, что это означает применить замену несколько раз, как в vim, когда вы делаете s/regexp/string/g. Но в случае с MySQL и MariaDB REGEXP_REPLACE() по умолчанию применяет замену ко всем совпадениям в строке.

Демонстрация с использованием MariaDB 10.4: https://dbfiddle.uk/ZFNMTfJ6

Если вы не получили тот же результат, пожалуйста, покажите результат SELECT VERSION();

Bill Karwin 11.01.2023 04:51

Извините, я имел в виду , и |.

Karim Ali 11.01.2023 05:00

Я обновил пример в своем ответе, чтобы показать, что удаление «,» работает так же, как и другие символы.

Bill Karwin 11.01.2023 06:18

Это не работает для меня. Я использую систему SaaS и не знаю, где найти версию.

Karim Ali 12.01.2023 19:50

Вы можете выполнить SQL-запрос?

Bill Karwin 12.01.2023 20:08

Нет, наша система SaaS предоставляет построитель отчетов, и мы можем включать такие функции, как regexp_replace, Max, Sum и т. д. Я не получаю никаких ошибок при включении вашего утверждения в построитель отчетов, но я не получаю желаемого результата.

Karim Ali 12.01.2023 20:48

Что произойдет, если вы попытаетесь запустить отчет с VERSION() в качестве функции?

Bill Karwin 12.01.2023 20:50

Отчет прерывается сообщением об ошибке: Отчет содержит недопустимую формулу или критерий. Обратитесь к панели справки Report Builder за списком допустимых функций.

Karim Ali 12.01.2023 20:52

Похоже, вы даже не используете MySQL в качестве серверной СУБД. Насколько вы в этом уверены?

Bill Karwin 12.01.2023 20:56

Только что подтвердил, что мы используем mysql-4.0.17

Karim Ali 12.01.2023 21:11

MySQL 4.0.17 был выпущен 14 декабря 2003 г. Функция REGEXP_REPLACE() поддерживается только в MySQL 8.0. Запуская такую ​​старую версию программного обеспечения MySQL, вы также теряете многие другие функции, исправления ошибок и улучшения производительности, разработанные за последние два десятилетия.

Bill Karwin 12.01.2023 21:35

Документацию по MySQL 3.23-4.0-4.1 можно найти по адресу downloads.mysql.com/docs/refman-4.1-en.a4.pdf

Bob Jarvis - Слава Україні 12.01.2023 21:45

Подтверждено, что функция VERSION() была добавлена ​​в MySQL 4.1.25 в 2008 году. В более старых версиях вы могли проверить версию с помощью SHOW GLOBAL VARIABLES LIKE 'version';

Bill Karwin 12.01.2023 22:49

Извините, я был исправлен, мы используем 10.4.24-MariaDB. Извините за дезинформацию.

Karim Ali 13.01.2023 15:58

Другие вопросы по теме