首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql的where里动态拼凑条件

2012-08-22 
sql的where里动态拼接条件以前用过iBatis,她的动态拼接sql功能在多条件查询时使用很方便;如果必须在一个sq

sql的where里动态拼接条件
以前用过iBatis,她的动态拼接sql功能在多条件查询时使用很方便;
如果必须在一个sql的where里动态拼接一个条件,怎么做呢?
先看看pl/sql伪代码(不用具体考虑其应用场景):

if 状态='1' then --状态为'1'时,where里要加入:结束时间>离开时间 结束时间>离开时间    else --否则,where里要加入:结束时间<当前时间结束时间<当前时间end if;

如果sql硬编码在程序里,可能会用if...else...拼接一下;
可惜,这里不行,只能写在where里,一个完整sql;
不知道oracle有没有一些变态函数支持简洁做法,就看看下面的写法:
SELECT * FROM TEST_TABLE TTWHERE ( TT.END_TIME>(CASE WHEN TT.STATUS='1' THEN TT.LEAVE_TIME ELSE NULL END) ORTT.END_TIME<(CASE WHEN TT.STATUS='1' THEN NULL ELSE SYSDATE END)  )

TT.STATUS='1'时,where里(TT.END_TIME>TT.LEAVE_TIME OR FALSE),即:TT.END_TIME>TT.LEAVE_TIME
TT.STATUS<>'1'时,where里(FALSE OR TT.END_TIME<SYSDATE),即:TT.END_TIME<SYSDATE;
这里就是根据字段与NULL比较返回false来做到的(小心JS里的trap),偶尔一个条件还好说,条件多了就爽歪歪了。


热点排行