2

我无法让不区分大小写的搜索在 SQLITE 中为 REGEX 工作。是否支持语法?

SELECT * FROM table WHERE name REGEXP 'smith[s]*\i'

我希望得到以下答案(假设数据库有这些条目):

Smith
Smiths
smith
smitH <--- 不是错字,但在数据库中

注意 - 这是较大 REGEX 的一小部分,所以我不会使用 LIKE

4

3 回答 3

1

The REGEXP function shipped with SQLite Manager is implented in JavaScript as follows:

var regExp = new RegExp(aValues.getString(0));
var strVal = new String(aValues.getString(1));

if (strVal.match(regExp)) return 1;
else return 0;

To get case-insensitive searches with the JavaScript RegExp object, you would not add a flag to the pattern string itself, but pass the i flag in the second parameter to the RegExp constructor. However, the binary REGEXP operator does not have a third flags parameter, and the code does not try to extract flags from the pattern, so these flags are not supported in this implementation.

于 2013-02-05T11:55:07.907 回答
1

如 CL 所述,SQLite 不支持此功能。这个问题的一个简单解决方案是使用 lower 将 REGEXP 表达式的左侧“小写”:

SELECT * FROM table WHERE lower(name) REGEXP 'smith[s]*';

这并不理想,但它有效。但要注意变音符号。如果您的文本使用它们,我会阅读更低的文档。

于 2018-08-01T21:03:59.673 回答
0

来自https://www.sqlite.org/lang_expr.html

如果在运行时添加了名为“regexp”的应用程序定义的 SQL 函数,则“X REGEXP Y”运算符将作为对“regexp(Y,X)”的调用来实现。

于 2019-11-12T14:19:22.200 回答