Как удалить все вхождения и I из строки с помощью REGEXP_REPLACE? Пробовал следующее, но это не работает
regexp_replace('123,|4abcd, aaa|,qqq|a', '|,', '', 'g')
Извините, я имел в виду , и |.
Потому что regexp_replace принимает список символов, а не пишет отдельную замену для каждого символа.
Удобно, что | и * теряют свое особое значение внутри класса символов (квадратные скобки):
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();
Извините, я имел в виду , и |.
Я обновил пример в своем ответе, чтобы показать, что удаление «,» работает так же, как и другие символы.
Это не работает для меня. Я использую систему SaaS и не знаю, где найти версию.
Вы можете выполнить SQL-запрос?
Нет, наша система SaaS предоставляет построитель отчетов, и мы можем включать такие функции, как regexp_replace, Max, Sum и т. д. Я не получаю никаких ошибок при включении вашего утверждения в построитель отчетов, но я не получаю желаемого результата.
Что произойдет, если вы попытаетесь запустить отчет с VERSION() в качестве функции?
Отчет прерывается сообщением об ошибке: Отчет содержит недопустимую формулу или критерий. Обратитесь к панели справки Report Builder за списком допустимых функций.
Похоже, вы даже не используете MySQL в качестве серверной СУБД. Насколько вы в этом уверены?
Только что подтвердил, что мы используем mysql-4.0.17
MySQL 4.0.17 был выпущен 14 декабря 2003 г. Функция REGEXP_REPLACE() поддерживается только в MySQL 8.0. Запуская такую старую версию программного обеспечения MySQL, вы также теряете многие другие функции, исправления ошибок и улучшения производительности, разработанные за последние два десятилетия.
Документацию по MySQL 3.23-4.0-4.1 можно найти по адресу downloads.mysql.com/docs/refman-4.1-en.a4.pdf
Подтверждено, что функция VERSION() была добавлена в MySQL 4.1.25 в 2008 году. В более старых версиях вы могли проверить версию с помощью SHOW GLOBAL VARIABLES LIKE 'version';
Извините, я был исправлен, мы используем 10.4.24-MariaDB. Извините за дезинформацию.
Зачем использовать регулярное выражение? Почему бы не просто replace(replace('123,|4abcd, aaa|,qqq|a', '*', ''), '|', '')?