在SQL中(遗憾的是)LIKE由于数据库违反了几乎所有规范化规则,因此经常不得不使用" "条件.我现在无法改变它.但这与这个问题无关.
此外,我经常使用条件,例如WHERE something in (1,1,2,3,5,8,13,21)更好的可读性和SQL语句的灵活性.
在没有编写复杂的子选择的情况下,有没有可能将这两种方法结合起来?
我想要一些简单WHERE something LIKE ('bla%', '%foo%', 'batz%')而不是这样的东西:
WHERE something LIKE 'bla%'
OR something LIKE '%foo%'
OR something LIKE 'batz%'
Run Code Online (Sandbox Code Playgroud)
我在这里使用SQl Server和Oracle,但我很感兴趣,如果在任何RDBMS中都可以这样做.
是否有可能结合起来LIKE,并IN在SQL Server的查询?
那么,这个查询
SELECT * FROM table WHERE column LIKE IN ('Text%', 'Link%', 'Hello%', '%World%')
Run Code Online (Sandbox Code Playgroud)
查找以下任何可能的匹配项:
Text, Textasd, Text hello, Link2, Linkomg, HelloWorld, ThatWorldBusiness
Run Code Online (Sandbox Code Playgroud)
等等...
我试图找到一种方法,如果可能的话,一起使用IN和LIKE.我想要完成的是放置一个子查询,将一个数据列表提取到一个IN语句中.问题是包含通配符的数据列表.有没有办法做到这一点?
只是我很好奇的东西.
Example of data in the 2 tables
Parent table
ID Office_Code Employee_Name
1 GG234 Tom
2 GG654 Bill
3 PQ123 Chris
Second table
ID Code_Wildcard
1 GG%
2 PQ%
Run Code Online (Sandbox Code Playgroud)
澄清说明(通过第三方)
由于我看到几个回答似乎没有解决Ziltoid所要求的问题,我想我会尝试澄清我认为他的意思.
在SQL中," WHERE col IN (1,2,3)"大致相当于" WHERE col = 1 OR col = 2 OR col = 3".
他正在寻找我伪编码的东西
WHERE col IN_LIKE ('A%', 'TH%E', '%C')
Run Code Online (Sandbox Code Playgroud)
这大致相当于
WHERE col LIKE 'A%' OR col LIKE 'TH%E' OR col LIKE '%C'
Run Code Online (Sandbox Code Playgroud)
正则表达式的答案似乎最接近; 其余的看起来很不合适.
而不是执行:
SELECT a
FROM b
WHERE a LIKE'a%'
或LIKE'b%'
或LIKE'c%'
有没有办法执行像这个伪代码一样的功能?
SELECT a
FROM b
WHERE IN('a%','b%','c%')
我需要选择一个字段以几个不同前缀之一开头的行:
select * from table
where field like 'ab%'
or field like 'cd%'
or field like "ef%"
or...
Run Code Online (Sandbox Code Playgroud)
在Oracle或SQL Server中使用SQL执行此操作的最佳方法是什么?我正在寻找类似以下语句(不正确)的内容:
select * from table where field like in ('ab%', 'cd%', 'ef%', ...)
Run Code Online (Sandbox Code Playgroud)
要么
select * from table where field like in (select foo from bar)
Run Code Online (Sandbox Code Playgroud)
编辑:我想看看如何通过在一个SELECT语句中给出所有前缀,将所有前缀存储在帮助程序表中来完成此操作.
前缀的长度不固定.
有一个简单的方法结合起来LIKE,并IN在SQL Server中的一个声明中,没有使用大量的AND和OR?
例如我在MySQL中知道你可以这样做:
SELECT * FROM table1 WHERE column1 REGEXP 'value1|value2|value3'
Run Code Online (Sandbox Code Playgroud)