Может частично зависеть от вашей реализации SQLite. От документы :
Оператор REGEXP - это специальный синтаксис для пользовательской функции regexp (). По умолчанию пользовательская функция regexp () не определена, поэтому использование оператора REGEXP обычно приводит к сообщению об ошибке. Если пользовательская функция с именем "regexp" добавляется во время выполнения, эта функция будет вызываться для реализации оператора REGEXP.
Если ваша реализация имеет , определенную REGEXP
, то она должна быть такой же простой, как регулярное выражение "(.*?)\(.*?\)(.*)
", возвращая только группы 1 и 2, чтобы игнорировать то, что находится внутри скобок.
Этот подход не переносим, поскольку, возможно, в большинстве реализаций SQLite не определено REGEXP
.
Кто-то на этом форуме недавно прошел длинную ветку с просьбой почти об одном и том же, и ему не повезло. Насколько я знаю, нет встроенной функциональности, чтобы сделать это.
Его окончательный ответ там заключался в том, чтобы обрезать постоянное количество символов, потому что все данные равномерно оканчивались на '@ xyz.com' - если ваши данные одинаково одинаковы, вы можете просто обрезать начальные и конечные Символы X и Y.
На самом деле, еще в 2003 , кто-то сделал патч для charindex
поддержки , но по какой-то причине он, очевидно, никогда не был добавлен в транк. Кто-то еще сделал аналогичный патч с большей функциональностью , но для этого требуется загрузить внешнюю разделяемую библиотеку - опять же, не точно переносимый.
Последний вариант может быть вашим лучшим вариантом - написание общей библиотеки на C и LOADing
из SQLite . Или вы можете просто реализовать модификацию строки на любом языке, который вы используете SQLite:)