我有一个查询,我试图运行,而不是必须多次输入此字符串。有没有办法可以直接输入数字?
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?
如果您的数字可能是未知的长度,但总是遵循“否 - >”,您可以使用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的含义
如果您知道每行的数字是8位数,那么您可以这样做:
select *
from program_errors
where program_programs like '%program'
and substr(key111,-8) in (49391250,50130037,.....);
如果只是您要搜索的几个值,则可以创建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;
我们通常在这里做的另一种方法是使用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列并使用它来生成剩余的数字。