【报表SQL】多值传入,Like 模拟 In 语法

场景(oracle):

我们有一个表 a,有一个列

现在要求 传入一个参数 x,x的值为id1,id2,id3 最终实现 select * from a where id in (id1,id2,id3)

这个在程序代码里比较容易实现,直接用 SQL 也可以。如 Select * from a where id in (&a)

但是在报表上直接实现就有些困难。

解决方法:

构造一个语句实现该效果,前提是id值中间不能有空格,将x的传入值处理为 id1 id2 id3 用空格间隔。

 

Select   *   from  a  where  参数x的值  like   ' % '   ||  id  ||   ' % '

 

加上数据就是这个样子:

Select   *   from  a  where   ' 1 2 3 '   like   ' %1% '

 id1 id2 id3 中间的空格,作为间隔符号了

当然,问题也来了,比如说值是这样的

Select   *   from  a  where   ' 11 12 13 '   like   ' %1% '

那么值就错了。

这样我们需要在处理一下:

Select   *   from  a  where   '  11 12 13  '    like   ' % 1 % '

这个时候用的是 id 前后各加一个空格,去匹配x的值。这样得到的值就是准确的了。
当然,这个空格可以根据需要替换成其他的字符。

一个稍微复杂点的BOE UNV应用(在这里,因为code是定长的,所以直接操作了)

Decode(trim( @Prompt ( ' 请输入险种代码,用空格分隔 ' ' A ' , , Mono, Free)), '' , ' 1 ' ,trim( @Prompt ( ' 请输入险种代码,用空格分隔 ' ' A ' , , Mono, Free)))  like    ' % ' || Decode(trim( @Prompt ( ' 请输入险种代码,用空格分隔 ' ' A ' , , Mono, Free)), '' , ' 1 ' ,t.PRODUCT_CODE) || ' % '  

 

当然,这个效率就比较一般了。

转载于:https://www.cnblogs.com/babyt/archive/2009/04/16/1437430.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值