【报表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)||'%'
当然,这个效率就比较一般了。