在SQL I中,(不幸的)我经常不得不使用“ LIKE”条件,因为数据库违反了几乎所有的规范化规则。我现在无法更改。但这与问题无关。
LIKE
此外,我经常使用条件WHERE something in (1,1,2,3,5,8,13,21)来提高SQL语句的可读性和灵活性。
WHERE something in (1,1,2,3,5,8,13,21)
有没有可能在不编写复杂的子选择的情况下将这两件事结合起来的方法?
我想要一些简单WHERE something LIKE ('bla%', '%foo%', 'batz%')而不是这样的东西:
WHERE something LIKE ('bla%', '%foo%', 'batz%')
WHERE something LIKE 'bla%' OR something LIKE '%foo%' OR something LIKE 'batz%'
我在这里使用SQl Server和Oracle,但是我很感兴趣是否可以在任何RDBMS中实现。
在SQL中没有LIKE&IN的组合,在TSQL(SQL Server)或PLSQL(Oracle)中则少得多。部分原因是因为建议使用全文搜索(FTS)。
Oracle和SQL Server FTS实现都支持CONTAINS关键字,但是语法仍然略有不同:
WHERE CONTAINS(t.something, 'bla OR foo OR batz', 1) > 0
WHERE CONTAINS(t.something, '"bla*" OR "foo*" OR "batz*"')
您要查询的列必须是全文索引。