我正在使用 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/