我无法让不区分大小写的搜索在 SQLITE 中为 REGEX 工作。是否支持语法?
SELECT * FROM table WHERE name REGEXP 'smith[s]*\i'
我希望得到以下答案(假设数据库有这些条目):
Smith
Smiths
smith
smitH <--- 不是错字,但在数据库中
注意 - 这是较大 REGEX 的一小部分,所以我不会使用 LIKE
我无法让不区分大小写的搜索在 SQLITE 中为 REGEX 工作。是否支持语法?
SELECT * FROM table WHERE name REGEXP 'smith[s]*\i'
我希望得到以下答案(假设数据库有这些条目):
Smith
Smiths
smith
smitH <--- 不是错字,但在数据库中
注意 - 这是较大 REGEX 的一小部分,所以我不会使用 LIKE
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.
如 CL 所述,SQLite 不支持此功能。这个问题的一个简单解决方案是使用 lower 将 REGEXP 表达式的左侧“小写”:
SELECT * FROM table WHERE lower(name) REGEXP 'smith[s]*';
这并不理想,但它有效。但要注意变音符号。如果您的文本使用它们,我会阅读更低的文档。
来自https://www.sqlite.org/lang_expr.html
如果在运行时添加了名为“regexp”的应用程序定义的 SQL 函数,则“X REGEXP Y”运算符将作为对“regexp(Y,X)”的调用来实现。