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

求助:根据不同的记录写不同的条件
本帖最后由 hwhtj 于 2013-12-03 17:31:49 编辑
有如下脚本

select id,xm, NVL(dm,'1111'), from tb where 1=1 and  dm='001'


我想实现如下

当dm字段为空时,把后面的条件dm='001'去掉

当dm字段不为空时,加上条件dm='001'

求助,该如何写?
------解决方案--------------------
select id,xm, NVL(dm,'1111'), from tb where NVL(dm,'001') ='001' ;
------解决方案--------------------
select id,xm, NVL(dm,'1111'), from tb where DECODE(dm,NULL,'001',dm) ='001'
------解决方案--------------------
楼上都可以,但是要建函数索引否则会慢

不追求效率,也可以如下
select id,xm, NVL(dm,'1111'), from tb where 1=1 and  (dm='001' or dm is null)


------解决方案--------------------
引用:
select id,xm, NVL(dm,'1111'), from tb where NVL(dm,'001') ='001' ;

赞一个