sqlite搜索多列

时间:2012-10-04 23:21:04

标签: sqlite select

我正在尝试对表中的所有列执行区分大小写的搜索,所以我做了类似这样的事情

Select * From mytable Where col1 || '--' || col2 || '--' || etc like '%SomeValue%'

但是对于大写和小写都返回相同的结果。如果我这样做

Select * From mytable Where col1 like '%SomeValue%' OR col1 like '%SomeValue%' etc

我得到了理想的结果。这里的问题是我不能使用第二个查询,因为我有大约36列要搜索,而写col1 like '%SomeValue%'最多36次是不必要的。

有没有人有任何解决方案?

1 个答案:

答案 0 :(得分:1)

一种解决方案是使用glob代替like

sqlite> select * from sqlite_master where ('foo' || '--' || 'bar') like '%Bar%';
table|t|t|2|CREATE TABLE t (a)
sqlite> select * from sqlite_master where ('foo' || '--' || 'bar') glob '*Bar*';
sqlite> select * from sqlite_master where ('foo' || '--' || 'bar') glob '*bar*';
table|t|t|2|CREATE TABLE t (a)
sqlite> 

另一种解决方案是使用pragma case_sensitive_like

sqlite> PRAGMA case_sensitive_like = 1;
sqlite> select * from sqlite_master where ('foo' || '--' || 'bar') like '%Bar%';
sqlite> select * from sqlite_master where ('foo' || '--' || 'bar') like '%bar%';
table|t|t|2|CREATE TABLE t (a)
sqlite>