SQL如何仅显示数字列表中的字段

时间:2014-08-20 15:00:57

标签: sql oracle oraclereports

我有一个项目表,每个项目都有一个项目ID(int)。我想只显示基于字符串的项目ID的项目。例如,我想显示项目" 12,1005,2"。这个字符串每次都不同。我该怎么做?

3 个答案:

答案 0 :(得分:0)

如果您使用的是Oracle,则可以使用IN

select from item i where i.id in (12,1005,2)

答案 1 :(得分:0)

您的参数是否总是由3个数字组成,或者在运行时可能有所不同? 如果它已修复,你可以使用substr和instr来剪切

答案 2 :(得分:0)

我会考虑Justin Cave记录的问题How can I select from list of values in Oracle。 Tom Kyte在他的Ask Tom网站上记录了一种类似的方法(没有regexpressions)。

由于您使用Oracle Reports处于Oracle Apps环境中,因此我只使用items表提供示例:

with x as
  ( select '12, 1005, 2' str from dual
  )
select *
from inv.mtl_system_items_b item
where item.organization_id =
  &org_id
and item.inventory_item_id in
  (select to_number(regexp_substr(str,'[^,]+',1,level)) element
  from x
    connect by level <= length(regexp_replace(str,'[^,]+')) + 1
  )

在Oracle报告中,您可以创建一个函数作为一个程序单元,使用类似的逻辑执行此逗号分隔值参数的解析(再次,请参阅Justin Cave的解析列表函数(与我上面提到的问题相关的答案)