Как использовать регулярные выражения в запросе SQLite? - PullRequest
91 голосов
/ 22 февраля 2011

Я бы хотел использовать регулярное выражение в sqlite, но я не знаю, как.

В моей таблице есть столбец с такими строками: "3,12,13,14,19,28,32" Теперь, если я наберу "где x LIKE '3'", я также получу строки, которые содержат значения, такие как 13 или 32, но я хотел бы получить только те строки, которые имеют значение 3 в этой строке.

Кто-нибудь знает, как это решить?

Ответы [ 13 ]

1 голос
/ 21 августа 2017

Исчерпывающее предложение or'ed where может сделать это без объединения строк:

WHERE ( x == '3' OR
        x LIKE '%,3' OR
        x LIKE '3,%' OR
        x LIKE '%,3,%');

Включает точное соответствие четырех случаев, конец списка, начало списка и середину списка.

Это более многословно, не требует расширения регулярных выражений.

0 голосов
/ 13 мая 2019

Вы можете рассмотреть также

WHERE x REGEXP '(^|\D{1})3(\D{1}|$)'

Это позволит найти номер 3 в любой строке в любой позиции

0 голосов
/ 21 октября 2012

Если вы используете php, вы можете добавить любую функцию в оператор SQL с помощью: SQLite3 :: createFunction . В PDO вы можете использовать PDO :: sqliteCreateFunction и реализовать функцию preg_match в своем выражении:

Посмотрите, как это сделано Havalite ( RegExp в SqLite с использованием Php )

...