以前用过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 TT
WHERE ( TT.END_TIME>(CASE WHEN TT.STATUS='1' THEN TT.LEAVE_TIME ELSE NULL END)
OR
TT.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),偶尔一个条件还好说,条件多了就爽歪歪了。
分享到:
相关推荐
动态拼接sql语句工具类,拼接where后面语句 配合原生jdbc仿动态sql注入 if (ObjectUtil.isNotEmpty(maxLat)&&ObjectUtil.isNotEmpty(minLat)){ sqlParamList.add(new SqlParam("lat",minLat, SqlOpEnum.GE)); ...
JDBC中动态拼接SQL的工具类。 对于使用纯SQL访问数据库的同学会有些帮助。 并具有一定的扩展性。
NULL 博文链接:https://zhaoshijie.iteye.com/blog/1060576
winform下实现的一个动态无限级的自定义添加SQLwhere条件的控件,显示外观是树状列表,只要你给这控件设置好哪几个字段可以用来拼where,那么运行起来后你可以动态的无限级的添加子and/or等等条件拼接,可以支持生成...
可以拼接select、update、delete语句以及where条件语句。 拼接where条件可自动组织参数并返回。 支持andEq(), andGt(), andGe(),andLt(), andLe(), andEqDate(), andEqTime(), andGtDate(), andGtTime(), andLtDate...
方法1、使用语言的for语句循环生成SQL语句中的“?”,类似这样: 新建方法 func placeholders(n int) string { var b strings.Builder for i := 0; i 0 { b.WriteString("?") } return b.String() } 调用...
在实际开发过程中,我们往往需要编写复杂的SQL语句,拼接稍有不注意就会导致错误,Mybatis给开发者提供了动态SQL,大大降低了拼接SQL导致的错误。 动态标签 if标签 if标签通常用那个胡where语句,update语句,insert...
pgsql拼接pgsql拼接pgsql拼接pgsql拼接
其中,动态SQL是MyBatis的一个重要特性,它允许用户根据不同的条件拼接SQL语句,从而实现更加灵活和可扩展的数据库操作。 在MyBatis中,动态SQL使用的主要方式是通过使用XML或注解来编写SQL语句。下面我将简单介绍...
这里我昨天碰到的问题就是... update table1 set field1=value1,field2 = value2 where id = id 我写成什么样子了呢?大家且看: declare @tableName nvarchar(50), @field1 int, @field2 nvarchar, @i
mybatis动态sqlMyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据库操作。在JDBC或其他类似框架中,开发人员通常需要手动拼接SQL语句,这既...