可选参数范围的处理

今天遇到这么个小问题,说来也常见。就记录一下。

 

查询 一个输入范围 内的 数据: Select * from table1 Where fld1>=A and fld<=B

 

其中A,B均为可选输入项目,有如下几种组合:

 

1:A有值,B无值,即 Select * from table1 Where fld1>=A

2:A有值,B有值,即 Select * from table1 Where fld1>=A and fld<=B

3:A无值,B无值,即 Select * from table1 

4:A无值,B有值,即 Select * from table1 Where  fld<=B

 

基本语法如下(Oracle),其中fld1字段为数值型函数

 

Select * from table1

Where 

decode('&1','',1,fld1)>=to_number(decode('&1','',1,'&1'))

and

decode('&2','',1,fld1)<=to_number(decode('&2','',1,'&2'))

 

基本思路是:

如果输入的值为空,则主动给一个1,将比对字段也设为1。
这样当值为空时,这个条件转化为1>=1,恒定为true,从而使该条件失效(说有效也可以)。

 

同理,如果只是对于一个可选参数,就是

Select * from table1

Where 

decode('&1','',1,fld1)>=to_number(decode('&1','',1,'&1'))

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值