在sqlite中使用LIKE区分大小写的便捷方法

时间:2009-11-18 16:29:04

标签: sqlite optimization sql-like

我看到LIKE运算符可以在我切换PRAGMA case_sensitive_like = ON时优化查询。我测量,它确实有效,查询“LIKE someth%”在分区大的二进制索引表上变快十倍。 但问题是我的库作为我的应用程序的附加组件实现,它维护自己的表与它连接的任何数据库。所以问题是

  • 我无法读取 case_sensitive_like ,因为它只支持设置,而不是读取。所以我不能暂时读取状态并在查询后返回它,
  • 作为一个应该服从db的主要功能的插件,我不应该将设置更改为我需要好的,因为它可能会影响其他例程。
  • 我看到没有Like(区分大小写)的内部等价物让我直接调用optimizid查询。例如,使用LIKECASESENSITIVE而不是LIKE
  • 我可以调用sqlite3_create_function,但我不知道我是否可以在内部调用LIKE(CASE SENSITIVE)。

1 个答案:

答案 0 :(得分:6)

  

我无法阅读case_sensitive_like   因为它只支持设置,   不读。所以我不能暂时   读取状态并在之后返回   查询

您可以使用类似这样的查询获取case_sensitive_like的状态:

select case when 'a' like 'A' then 0 else 1 end

如果1将返回case_sensitive_like = ON,如果0则返回OFF