Как я могу удалить все вхождения и я из строки, используя 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
Конечные и Readonly классы в PHP
Конечные и Readonly классы в PHP
В прошлом, когда вы не хотели, чтобы другие классы расширяли определенный класс, вы могли пометить его как final.
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
БЭМ: Конвенция об именовании CSS
БЭМ: Конвенция об именовании CSS
Я часто вижу беспорядочный код CSS, особенно если проект большой. Кроме того, я совершал эту ошибку в профессиональных или личных проектах и...
Революционная веб-разработка ServiceNow
Революционная веб-разработка ServiceNow
В быстро развивающемся мире веб-разработки ServiceNow для достижения успеха крайне важно оставаться на вершине последних тенденций и технологий. По...
Как добавить SEO(Search Engine Optimization) в наше веб-приложение и как это работает?
Как добавить SEO(Search Engine Optimization) в наше веб-приложение и как это работает?
Заголовок веб-страницы играет наиболее важную роль в SEO, он помогает поисковой системе понять, о чем ваш сайт.
Конфигурация Jest в angular
Конфигурация Jest в angular
В этой статье я рассказываю обо всех необходимых шагах, которые нужно выполнить при настройке jest в angular.
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

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