0

我创建了一个 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%

完整的例子在这里

4

1 回答 1

0

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

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

sqlite> select simple_query('''');
"'"
sqlite> select simple_query('"');
""""
sqlite> .mode quote
sqlite> select simple_query('"');
'""""'
sqlite> select simple_query('''');
'"''"'
于 2021-02-02T03:31:36.713 回答