无法运行简单查询,得到“缺少右括号”错误

时间:2016-10-19 20:08:32

标签: sql oracle

此查询有什么问题?

select author_num from (henry_author where (contains(author_first,'Albert') > 0))

继续给我一个错误,错过了一个右括号?

1 个答案:

答案 0 :(得分:1)

SELECT author_num FROM henry_author WHERE author_first LIKE '%Albert%';

或者,可能更好地解决数据不一致问题:

SELECT author_num FROM henry_author WHERE UPPER(author_first) LIKE '%ALBERT%';

%是一个匹配零个或多个字符的通配符。因此,%ALBERT%表示任何事情都可以在“ALBERT”之前或之后,这实际上是您的contains()函数所做的事情。

UPPER只是一个将字符串转换为大写字符的函数,这使得处理潜在的数据不一致变得更容易,即。有人打电话给阿尔伯特'而不是' Albert'等

由于您正在使用JDBC,因此您可能希望将查询结构化为使用PreparedStatement,这样您就可以参数化查询:

final String sqlSelectAuthorNum = "SELECT author_num FROM henry_author WHERE UPPER(author_first) LIKE ?";
final PreparedStatement psSelectAuthorNum = conn.prepareStatement(sqlSelectAuthorNum);

// now execute your query someplace in your code.
psSelectAuthorNum.setString(1, "%" + authorName + "%");
final ResultSet rsAuthorNum = psSelectAuthorNum.executeQuery();
if (rsAuthorNum.isBeforeFirst()) {
    while (rsAuthorNum.next()) {
        int authorNumber = rsAuthorNum.getInt(1);
        // etc...
    }
}