当前位置: 首页 > 面试题库 >

如何在纯SQL中编写一个空安全比较``<=>''?

孟建木
2023-03-14
问题内容

在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);


 类似资料:
  • 问题内容: 在Mysql中,有一个比较运算符,该运算符为null安全:<=>。创建如下这样的准备好的语句时,我在Java程序中使用了它: 现在,我想切换到H2数据库。如何在纯SQL中编写<=>运算符(例如使用IS NULL和IS NOT NULL)?我只想使用stmt.setString操作 一次 。可以多次写入列名。 参考:http : //dev.mysql.com/doc/refman/5.

  • 问题内容: 运行时不断告诉我: 预期缩进的块 但是我不想在我的except块内什么也不写,我只是想让它捕获并吞下异常。 问题答案: 写就好了 如 编辑:@swillden提出了一个好观点,即,这通常是一个可怕的想法。你至少应该说 或您要处理的任何类型的错误。否则,您可以掩盖更大的问题。

  • 本文向大家介绍如何用Java编写一个空函数,包括了如何用Java编写一个空函数的使用技巧和注意事项,需要的朋友参考一下 让我们看看如何在Java中编写一个空函数- 示例 输出结果 空函数基本上是在不定义函数的情况下创建函数的。名为Demo的类包含一个名为'my_empty_fun'的空函数,该函数只需放置两个花括号即可完成,而无需添加任何功能。在main函数中,编写了一条print语句,然后调用e

  • 我刚开始使用Haskell,希望在不安装额外库的情况下制作一个简单的实时游戏。我需要写一个循环,扫描键盘输入,但如果没有输入,游戏也必须运行。我该怎么做?

  • 问题内容: 所以,这是表格- 在这里,表格只会映射其他两个表格。 我想要显示数据的方式是- 在这里,“厨房”,“洗手间”,“屋顶”,“花园”列的值是发生的事件总数。“百分比”列将显示总计数的百分比。 如何在Oracle SQL中做到这一点? 问题答案: 您需要使用标准的 PIVOT 查询。 根据您的 Oracle数据库版本 ,您可以通过以下两种方式进行操作: 将 PIVOT 用于 11g 及更高

  • 问题内容: 我正在为这样的简单类实现方法(以便能够使用和Java平台提供的其他功能): 我希望这些对象的 自然排序 是:1)按名称排序,以及2)如果名称相同,则按值排序;两种比较均应不区分大小写。对于这两个字段,空值都是完全可以接受的,因此在这些情况下不得中断。 我想到的解决方案是遵循以下思路的(我在这里使用的是“保护条款”,而其他人可能更喜欢单个返回点,但那一点并不重要): 这可以完成工作,但是