无法在 System.Data.SQLite 中使用 REGEXP 运算符

Unable to use REGEXP operator in System.Data.SQLite

假设我有以下 table 和其中的数据:

CREATE TABLE urls (url TEXT);
INSERT INTO urls VALUES('https://www.google.ru/?gws_rd=ssl#newwindow=1&q=&safe=off');
INSERT INTO urls VALUES('https://www.google.ru/?gws_rd=ssl#newwindow=1&safe=off&q=1');
INSERT INTO urls VALUES('https://www.google.ru/?gws_rd=ssl#newwindow=1&q=2&safe=off');
INSERT INTO urls VALUES('https://www.google.ru/?gws_rd=ssl#newwindow=1&q=23&safe=off');

我需要 select URL 包含非空查询参数的所有记录(在本例中,除了第一条记录外都是)。

我正在使用 SQLite,所以我决定像这样使用 REGEXP 运算符:

string sql = @"SELECT * FROM urls WHERE url REGEXP '\/(?:www\.)?google.+?q=([^&]+)(?:&|$)'";
var command = new SQLiteCommand(sql, dbConnection);
SQLiteDataReader reader = command.ExecuteReader();
while (reader.Read())
{
    Console.WriteLine("Url: " + reader["url"]);
}

但它给了我以下错误:

An unhandled exception of type 'System.Data.SQLite.SQLiteException' occurred in System.Data.SQLite.dll

Additional information: SQL logic error or missing database

no such function: REGEXP

有什么办法可以解决吗?如果没有,我可以做什么?

提前致谢。

SQLite 没有内置 regexp() 函数,如 documentation:

中所述

The REGEXP operator is a special syntax for the regexp() user function. No regexp() user function is defined by default and so use of the REGEXP operator will normally result in an error message. If an application-defined SQL function named "regexp" is added at run-time, then the "X REGEXP Y" operator will be implemented as a call to "regexp(Y,X)".

我承认数据库只支持语法而不支持底层函数是不寻常的。但是,提供您自己的功能应该很容易。

regexp 比较运算符不是 SQL 标准的一部分。它是特定于 mysql 的扩展。

也许你可以直接使用like。这应该做同样的事情:

url LIKE '%google.%q=%'