Sql 类似oracle的语句转换?
我有一个我正在尝试运行的查询,而不是多次输入这个字符串。有什么方法可以让我把数字倒进去吗Sql 类似oracle的语句转换?,sql,oracle,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 ->
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 如果您知道每行数字为8位,则可以执行以下操作:
select *
from program_errors
where program_programs like '%program'
and substr(key111,-8) in (49391250,50130037,.....);
如果您的数字长度未知,但始终遵循“否”->,则可以使用REGEXP\u SUBSTR: 挑选* 从程序错误 其中程序\u像“%program”这样的程序 以及4939125050130037中的regexp_substrkey111,'No->[0-9]*',1,1,1 需要oracle 11g或更高版本。有关参数的含义,请参见doco
如果只是搜索几个值,您可以创建一个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列中,并使用它生成剩余的号码。看一看您正在使用和限制结果-这怎么可能起作用,不同的模式不能同时匹配?是的,如果值的构造是一致的,您可以将key111内容的子字符串转换为数字,但它将不可索引。您向我展示的oracle文档是一个很好的发现!我也不得不改成“或”。我搞砸了是的,你应该可以编写一个正则表达式来匹配%No->[0-9]{8}例如,类似这样的东西很高兴知道: