"?-6ren"> "?-在 Mysql 中有一个空安全的比较运算符:。在我的 Java 程序中创建这样的准备好的语句时,我使用它: String routerAddress = getSomeValue(); String -6ren">
gpt4 book ai didi

java - 如何在纯 SQL 中编写空安全比较 "<=>"?

转载 作者:可可西里 更新时间:2023-11-01 06:35:18 26 4
gpt4 key购买 nike

在 Mysql 中有一个空安全的比较运算符:<=>。在我的 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 操作一次。列名多写几次也没关系。

相关问题是Get null == null in SQL .但是那个答案要求搜索值写2次(也就是:我的PreparedStatement中有2个问号)!?

引用: http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_equal-to

最佳答案

Related question is Get null == null in SQL. But that answer requires the search value to be written 2 times (that is: 2 question marks in my PreparedStatement)!?

排在第二位和后面的答案给出了一种无需两次绑定(bind)搜索值即可执行此操作的方法:

SELECT * FROM ROUTERS 
WHERE coalesce(ROUTER_ADDRESS, '') = coalesce( ?, '');

请注意,这需要一个永远不可能是有效列值(即“带外”)的虚拟值;我正在使用空字符串。如果您没有任何此类值,则必须忍受两次绑定(bind)该值:

SELECT * FROM ROUTERS 
WHERE ROUTER_ADDRESS = ? or (ROUTER_ADDRESS is null and ? is null);

关于java - 如何在纯 SQL 中编写空安全比较 "<=>"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/802612/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com