oracle LIKE语句转换?

问题描述 投票:0回答:4

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

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'
;

我想做的就是将你在'strings'中看到的数字插入某些东西(可能是'IN'子句或'HAVING'子句)并将它带回来。上述声明适用于我的程序,但我想知道是否有人知道更有效的方法。有没有办法将key111更改为int?

sql oracle
4个回答
0
投票

如果您的数字可能是未知的长度,但总是遵循“否 - >”,您可以使用REGEXP_SUBSTR

select * from 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的含义


1
投票

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

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

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;

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列并使用它来生成剩余的数字。

© www.soinside.com 2019 - 2024. All rights reserved.