2

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

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 次是不必要的。

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

4

1 回答 1

2

一种解决方案是使用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> 
于 2012-10-05T01:28:14.433 回答