gpt4 book ai didi

java语句、oracle nvl、LIKE比较

转载 作者:行者123 更新时间:2023-12-01 21:40:10 25 4
gpt4 key购买 nike

我正在使用 Java 6 和 Oracle 10。我有一个 java 语句,我想测试 null 或空字符串。

我的代码如下所示:

PreparedStatement stmt = null;
String sql = "SELECT table_field FROM table_name WHERE NVL(table_field, '') LIKE ? ";
stmt = connection.prepareStatement(sql);
stmt.setString(myEmptyString, 1);

我的 table_field 中有 NULL 值,但我的查询在执行时不返回任何内容。我缺少什么?

我目前使用 WHERE table_field IS NULL 的解决方法,但我也想检查空字符串。

最佳答案

在 Oracle 中 an empty string is the same as null ,因此 NVL(table_field, '')NVL(table_field, null) 相同,但没有实现任何目标。如果该字段为空,则它保持为空。

您也不能将 null 与任何内容进行比较。如果你想在结果集中包含空值,那么你可以这样做:

WHERE table_field IS NULL OR table_field LIKE ?

如果绑定(bind)参数可能为空(或空字符串),并且您只想匹配空值,那么您可以这样做:

WHERE (? IS NULL AND table_field IS NULL) OR (table_field LIKE ?)

但是您需要提供两次绑定(bind)值。

仅当您绑定(bind)的值具有通配符并且您想要查找部分匹配项时,使用 LIKE 才有意义。如果您正在寻找完全匹配的内容,请使用 = 而不是 LIKE。它可能不会影响结果集,但可能会以意想不到的方式影响,并且它使意图更加清晰。

关于java语句、oracle nvl、LIKE比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36595305/

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