SQLite匹配查询

8oomwypt  于 2022-11-15  发布在  SQLite
关注(0)|答案(2)|浏览(261)

我已经创建了一个虚拟表,并且正在执行以下不返回任何内容的查询:

SELECT * FROM table_search WHERE name MATCH 'Test'

如果我将匹配更改为‘=’或‘LIKE’,则查询将返回一行数据。

yhqotfr8

yhqotfr81#

正如documentation解释的那样:
MATCH运算符是Match()应用程序定义函数的特殊语法。默认的Match()函数实现会引发异常,对任何事情都没有实际用处。但是扩展可以用更有用的逻辑覆盖Match()函数。
如果您没有定义这样的函数,那么它将不选择任何行。如果您已经定义了这样的函数,则在您的问题中进行解释。否则,请坚持使用like=regexp

tcomlyy6

tcomlyy62#

我想知道戈登·利诺夫的回答发生了什么变化,因为他显然是SQLMaven,而我不是。只是谈谈我的亲身经历:
对于FTS查询,不要指定列,而要指定表名:

SELECT * FROM table_search WHERE table_search MATCH 'Test'

我犯了同样的错误,甚至在阅读Gordon Linoff和文档的答案后,尝试从this repository实现一个定制的MATCH函数。
Match运算符是Match()应用程序定义函数的特殊语法。默认的Match()函数实现会引发异常,对任何事情都没有实际用处。但是扩展可以用更有用的逻辑覆盖Match()函数。
相反,如果我使用表名和Asterix 'Test*',我发现MATCH函数开箱即用(使用SQLite 3.39),但这只是因为我的特定数据集和一个错误的假设。
自定义函数不会被MATCH调用,但如果我将其应用于类似于

SELECT match(name) FROM table_search WHERE table_search MATCH 'Test'

这是一个非常不同的意图。

相关问题