SQLite: Как извлечь из столбца только цифры и специальные символы? - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь извлечь числа и специальные символы в строке, как я могу это сделать в SQL? (SQLite)

Есть ли способ с FORMAT ()? с ЗАМЕНА ()?
Я ищу [@ $!% *? & /] И [0-9] числа ...

Строка:

Rue des cocotiers, 9/11  

Результат:

9/11

Спасибо

1 Ответ

0 голосов
/ 14 января 2019

Как правило, это решение для регулярных выражений, но, хотя sqlite теперь имеет возможность выполнять выражения REGEXP в предложениях WHERE, он не реализовал стандартную функцию regexp_replace, которую можно найти в более полных реализациях SQL.

Как использовать REGEXP в SQLite3 для извлечения совпавшей строки (в качестве значения столбца)

Чтобы запустить выражение вроде этого:

SELECT trim(regexp_replace(threeload.title, '\b([\d*#+\/]+)\b')) str
  FROM threeload
 WHERE threeload.title REGEXP '\b([\d*#+\/]+)\b';

сначала нужно перекомпилировать sqlite с помощью дополнительной функции, возможно, такой, как описанная в этом ответе:

https://stackoverflow.com/a/44586265/10890850

Вот шаги на случай, если он будет удален (не мой ответ, пожалуйста, оставьте исходный ответ любым голосом):

Sqlite по умолчанию не предоставляет функцию regex_replace. Вы нужно загрузить его как расширение. Вот как мне удалось это сделать.

Загрузить этот C-код для расширения (icu_replace)

Скомпилируйте его, используя

gcc --shared -fPIC -I sqlite-autoconf-3071100 icu_replace.c -o icu_replace.so

А в sqlite3 запускается следующий командный пункт выше упомянутая команда запустилась и создала файл icu_replace.so

SELECT load_extension(' path to icu_replace.so',
'sqlite3_extension_init') from dual;

После этого вы сможете использовать такую ​​функцию как: -

select regex_replace('\bThe\b',x,'M') from dual;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...