oracle LIKE语句转换?

时间:2017-12-18 19:53:52

标签: sql oracle

我有一个我正在尝试运行的查询,而不是必须多次输入此字符串。有没有办法可以直接输入数字?

select *
from program_errors
where program_programs like '%program' 
or key111 like '%No -> 49391250'
and key111 like '%No -> 50130037'
and key111 like '%No -> 50804475'
and key111 like '%No -> 51003148'
and key111 like '%No -> 51053053'
;

我想做的就是插入你在'字符串组中看到的数字'某事(可能是' IN'条款或' HAVING'条款)并且它带回了数据。上述声明适用于我的程序,但我想知道是否有人知道更有效的方法。有没有办法将key111更改为int?

4 个答案:

答案 0 :(得分:1)

如果您知道每行的数字是8位数,那么您可以这样做:

select *
from program_errors
where program_programs like '%program' 
and substr(key111,-8) in (49391250,50130037,.....);

答案 1 :(得分:0)

如果您的号码长度不详,但始终遵循“否 - >”你可以使用REGEXP_SUBSTR

选择* 来自program_errors program_programs喜欢'%program' 和regexp_substr(key111,'No - >([0-9] *)',1,1,'',1)in(49391250,50130037,.....);

需要oracle 11g或更高版本。看到doco的参数含义 https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions138.htm#SQLRF06303

答案 2 :(得分:0)

如果只是您要搜索的几个值,则可以创建一个CTE:

with keys as (
  select '49391250' as key from dual
  union all select '50130037' from dual
  union all select '50804475' from dual
  union all select '51003148' from dual
  union all select '51053053' from dual
)
select p.*
from program_errors p
where p.program_programs like '%program'
union
select p.*
from program_errors p
join keys on p.key111 like '%No -> ' || keys.key;

答案 3 :(得分:0)

我们通常在这里做的另一种方法是使用excel公式生成重复的sql部分:

Column A                  Column B    Column C   Column D
    Key111 like '%No ->   49391250    '          A1&B1&C1
and key111 like '%No ->   50130037    '          A2&B2&C2
and key111 like '%No ->   50804475    '          A3&B3&C3
and key111 like '%No ->   51003148    '          A4&B4&C4
and key111 like '%No ->   51053053    '          A5&B5&C5

您需要做的只是将所有数字粘贴到B列,然后用它来生成剩余的数字。