在Mysql中,有一个比较运算符,该运算符是null安全的:<=>。创建如下这样的准备好的语句时,我在Java程序中使用了它:
String routerAddress = getSomeValue(); String sql = "SELECT * FROM ROUTERS WHERE ROUTER_ADDRESS <=> ? "; PreparedStatement stmt = connection.prepareStatement(sql); stmt.setString(1, routerAddress);
现在,我想切换到H2数据库。如何在纯SQL中编写<=>运算符(例如使用IS NULL和IS NOT NULL)?我只想使用stmt.setString操作 一次 。可以多次写入列名。
相关问题是在SQL中获取null ==null。但是该答案要求将搜索值写入2次(即:在我的PreparedStatement中有2个问号)!
参考:http : //dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_equal- to
相关问题是在SQL中获取null == null。但是该答案要求将搜索值写入2次(即:在我的PreparedStatement中有2个问号)!
排名第二和随后的答案提供了一种无需两次绑定搜索值即可执行此操作的方法:
SELECT * FROM ROUTERS WHERE coalesce(ROUTER_ADDRESS, '') = coalesce( ?, '');
请注意,这需要一个伪值,该伪值永远不能是有效的列值(即“带外”)。我正在使用空字符串。如果没有任何此类值,则必须忍受两次绑定该值:
SELECT * FROM ROUTERS WHERE ROUTER_ADDRESS = ? or (ROUTER_ADDRESS is null and ? is null);