sqlite - 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%
完整的例子在这里
解决方案
这个问题终于在sqlite-forum得到了解答,我想把原因贴在这里。
原因是 SQLite 会尝试为我们转义字符串,我们可以验证打开引号模式后,如您所见,我们的返回值会被 SQLite 从 "'" 转义为 "''"。这意味着我们不需要在函数中转义单引号。
sqlite> select simple_query('''');
"'"
sqlite> select simple_query('"');
""""
sqlite> .mode quote
sqlite> select simple_query('"');
'""""'
sqlite> select simple_query('''');
'"''"'
推荐阅读
- apache-flink - flink 不在 std 输出中打印对象
- docusignapi - 使用 Docusign REST API 进行复选框验证
- android - 在 Android 中对多个片段使用单个 webview
- python - 为什么赋值运算符会影响所有元素?
- python - Django:这个数据迁移会不会消耗服务器内存?
- mysql - 具有动态列名的 SQL SELECT 语句
- mysql - 无法在 10.1.34-MariaDB 中使用 WITH AS
- android - 致命异常:java.lang.UnsatisfiedLinkError 找不到 lib.so
- javascript - 垃圾邮件异步回调打破了我的 setTimeout 延迟
- c - 在 C 中设置可执行目录中的文件名