首页 > 解决方案 > SQLite 自定义函数作为匹配字符串

问题描述

我创建了一个 SQLite 函数,它接受一个字符串并返回另一个字符串,然后我可以将返回值用作匹配字符串。代码在这里

除了单引号外,它工作得很好。在这种情况下,它无法匹配任何行,但如果我直接使用返回的字符串,它可以匹配。有人知道这里有什么问题吗?

sqlite> select simple_query('''');
"''"
sqlite> select '    ', simple_highlight(t1, 0, '[', ']') from t1 where x match simple_query('''');
sqlite> select '    ', simple_highlight(t1, 0, '[', ']') from t1 where x match '"''"';
    |@English &special _characters."[']bacon-&and[']-eggs%

完整的例子在这里

标签: sqlitefts5

解决方案


这个问题终于在sqlite-forum得到了解答,我想把原因贴在这里。

原因是 SQLite 会尝试为我们转义字符串,我们可以验证打开引号模式后,如您所见,我们的返回值会被 SQLite 从 "'" 转义为 "''"。这意味着我们不需要在函数中转义单引号。

sqlite> select simple_query('''');
"'"
sqlite> select simple_query('"');
""""
sqlite> .mode quote
sqlite> select simple_query('"');
'""""'
sqlite> select simple_query('''');
'"''"'

推荐阅读