日期:2014-05-17  浏览次数:20830 次

instr和decode组合的用法(多条件查询)
select e.到达日期,
e.角色名,
d.单据标题,
d.单据编号,
e.节点编号,
e.处理动作,
e.处理日期,
b.流程实例编号 from gzl_流程类型 a,
gzl_流程实例 b,
gzl_流程定义 c,
dj_单据 d,
gzl_流程流转状态 e
where a.流程类型编号 = c.流程类型编号 and e.处理标记 = '是'
and e.用户id = 'tetdmis' and b.流程定义编号 = c.流程定义编号
and b.活动编号 = d.单据编号 and c.流程定义编号 = b.流程定义编号
and e.流程实例编号 = b.流程实例编号
and instr(decode(:流程类型条件, '-1', a.流程类型编号, :流程类型条件), a.流程类型编号) > 0
and (to_char(e.处理日期, 'yyyy-mm-dd') between :开始日期 and :结束日期)
and instr(decode(:节点名称条件, '-1', e.处理动作, :节点名称条件),
e.处理动作) > 0 

instr(decode(:流程类型条件, '-1', a.流程类型编号, :流程类型条件), a.流程类型编号) > 0
这个我看不明白,谁帮我分析下,这2个函数我知道作用。



------解决方案--------------------
decode(表达式,值1,结果1,值2,结果2....,其它)
计算表达的值,如果为值1,函数的结果就是结果1,如果为值2,函数的结果就是结果2
如果都没有匹配,函数的结果就是其它
instr(串1,子串)
在串1中查找子串,如果找到则返回子串在串1中的开始位置,如果没有找到,则返回0