【发布时间】:2013-02-21 05:39:50
【问题描述】:
有可能做这样的事情吗?
即。
IN ('%1', '%2')
价值不少
你会如何解决这个任务?
【问题讨论】:
-
你从哪里得到值?
有可能做这样的事情吗?
即。
IN ('%1', '%2')
价值不少
你会如何解决这个任务?
【问题讨论】:
您也可以使用 REGEXP_LIKE 代替 LIKE。在这种情况下可以更加灵活。
要获取以“1”或“2”结尾的所有内容,只需使用:
SELECT * FROM table_name WHERE REGEXP_LIKE(col_name, '[12]$')
[12] 表示匹配 1 或 2。$ 表示匹配字符串的结尾。
如果你需要这样的东西:
LIKE '%1' OR LIKE '%2' or LIKE '%A' or LIKE '%W'
...您只需在方括号内添加其他字符:
SELECT * FROM table_name WHERE REGEXP_LIKE(col_name, '[12AW]$')
或者,如果您想要以数字结尾的 任何内容,您可以使用:
SELECT * FROM table_name WHERE REGEXP_LIKE(col_name, '[[:digit:]]$'
【讨论】:
如果你只有几个,只需将它们与or结合起来:
column like '%1' or column like '%2' or...
如果你有很多,你可以创建一个包含模式的表格并加入它。
create table matches (
match char(10)
);
insert into matches values
('%1'),('%2'),...;
select * from table
inner join matches on table.column like matches.match;
如果单行匹配多个模式,则会出现重复行的问题,但您可以根据您想要的最终输出类型进行修改。
作为第三种选择,如果它们的长度相同,您可以使用 substr() 而不是 like:
select * from table where substr(column,-1,1) in ('1','2',...)
这会检查最后一个字符是否在值集中。
【讨论】:
使用like 本身怎么样?
Column LIKE '%1' OR Column LIKE '%2'
【讨论】:
与其他人的例子基本相同,但最接近你的例子:
SELECT deptno, empno, ename FROM scott.emp
WHERE job IN
(SELECT job FROM scott.emp WHERE job Like ('SALE%') OR job Like ('MANAG%'))
/
【讨论】: