我有一个我正在尝试运行的查询,而不是必须多次输入此字符串。有没有办法可以直接输入数字?
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?
答案 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列,然后用它来生成剩余的数字。