druid 解析hive sql时将双引号 " 变为了单引号 '

mum43rcc  于 5个月前  发布在  Druid
关注(0)|答案(1)|浏览(86)

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 测试不会出现这个问题

zfycwa2u

zfycwa2u1#

用反引号吧
select * from where old = 'xxxx'

相关问题