sql中含有双引号会被强制解析为单引号,对于hive sql来说,单引号和双引号具有不一样的意义。
下图代码
public class DruidTest {
public static void main(String[] args) {
String sql = "select * from t where \"old\" = 'xxxx' ";
SQLExpr expr = SQLUtils.toSQLExpr(sql, DbType.hive);
System.out.println(SQLUtils.toSQLString(expr, "hive"));
}
}
输出结果:
(
SELECT *
FROM t
WHERE 'old' = 'xxxx'
)
old 对于hive来说是一个关键字,用双引号包住old表示查询字段 old,但是druid改为了 'old', 后端查询会将 'old' 当做一个字符串。
版本:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.5</version>
</dependency>
使用 1.1.23 / 1.1.24 测试不会出现这个问题
1条答案
按热度按时间zfycwa2u1#
用反引号吧
select * from where
old
= 'xxxx'