java语句,oracle nvl,LIKE比较

时间:2016-04-13 10:15:04

标签: java oracle jdbc

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

我的代码如下所示:

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

我的NULL中有table_field个值,但执行时我的查询没有返回任何内容。 我错过了什么?

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

1 个答案:

答案 0 :(得分:3)

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

您也无法将null与任何内容进行比较。如果要在结果集中包含空值,则可以执行以下操作:

WHERE table_field IS NULL OR table_field LIKE ?

如果bind参数可能为null(或空字符串)并且您只想匹配空值,则可以执行以下操作:

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

但是你需要提供两次绑定值。

使用LIKE只有在绑定值具有通配符并且您想要查找部分匹配时才有意义。如果您要查找完全匹配,请使用=代替LIKE。它可能不会影响结果集,但它可能以意想不到的方式,并使意图更清晰。