在ORACLE 中使用Instr和Decode函数处理组合查询
系统开发中经常要处理多条件组合查询的情况,使用这两函数可以简化处理。先说下这两函数的语法:
在Oracle/PLSQL中, instr 函数返回一个子串出现的位置。
Instr函数的语法:
instr (string1, string2, [start_position], [nth_appearance])
string1 准备从中查找的字符串。
string2 是要查找的字符子串。
start_position 是指要在string1中开始查找的位置。可选项,忽略时从1开始查找。如果它是个负数,则从string1的末端往开始方向数起第start_position字符开始查找。
nth_appearance 指定在string1中第几次出现string2。忽略,则默认为1。
再说明一下decode()的功能和语法:
它跟一个if …then else 非常类似,
decode函数的语法为:
decode ( expression , search , result [, search , result]... [, default] )
expression 是比较的目标。
search 是跟目标比较的值。
result 是如果expression 与 search 值相等,则返回值为result.
default 可选项,如果expression与所有的search不相等,则返回default。
应用举例:
Open t_Outcusor For
Select Outpo_No,
Outpodate,
Remark,
Drivername,
Driverno,
Conttel,
Consignee,
Conaddress,
Voucherno,
Carno,
Model,
Lacptno
From Tpeccancy p,
Tmailintegration m
Where Instr(Decode(v_Carno, '%', Carno, v_Carno), Carno) > 0
And Instr(Drivername, Decode(v_Voucherno, '%', Drivername, v_Voucherno)) > 0 And p.Lacptno = m.Seqno And
m.Ctrlbureau = p_Tcbranchid And p.Rjflag = '0' And Acptdate Between p_Begindate And p_Enddate;