1818IP-服务器技术教程,云服务器评测推荐,服务器系统排错处理,环境搭建,攻击防护等

当前位置:首页 - 数据库 - 正文

君子好学,自强不息!

以下的文章主要介绍的是如何正确的使用Oracle Instr()和decode()函数来进行多条件的组合查询,在相关系统中我们经常遇到要处理的多条件组合查询的相关情况,使用instr()和decode()函数的实现方法。

下面先说明一下instr()的功能和语法:(函数的语法是从处得到的,相当清晰明了:)

InOracle/PLSQL,theinstrfunctionreturnsthelocationofasubstringinastring. 
Thesyntaxfortheinstrfunctionis: 
instr(string1,string2,[start_position],[nth_appearance]) 
string1isthestringtosearch. 
string2isthesubstringtosearchforinstring1. 
start_positionisthepositioninstring1wherethesearchwill
start.Thisargumentisoptional.Ifomitted,itdefaultsto1.
Thefirstpositioninthestringis1.Ifthestart_positionisnegative,
thefunctioncountsbackstart_positionnumberofcharactersfrom
theendofstring1andthensearchestowardsthebeginningofstring1. 
nth_appearanceisthenthappearanceofstring2.Thisisoptional.Ifomiited,itdefaultsto1. 

再说明一下decode()的功能和语法:

InOracle/PLSQL,thedecodefunctionhasthefunctionalityofanIF-THEN-ELSEstatement. 
Thesyntaxforthedecodefunctionis: 
decode(expression,search,result[,search,result]...[,default]) 
expressionisthevaluetocompare. 
searchisthevaluethatiscomparedagainstexpression. 
resultisthevaluereturned,ifexpressionisequaltosearch. 
defaultisoptional.Ifnomatchesarefound,thedecodewillreturndefault.
Ifdefaultisomitted,thenthedecodestatementwillreturnnull(ifnomatchesarefound). 

综合使用得到的SQL语句如下:

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

本文来源:1818IP

本文地址:https://www.1818ip.com/post/11185.html

免责声明:本文由用户上传,如有侵权请联系删除!

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。