现在的位置: 首页 > 综合 > 正文

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

2013年10月14日 ⁄ 综合 ⁄ 共 789字 ⁄ 字号 评论关闭

场景(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)||'%' 

 

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

抱歉!评论已关闭.