Oracle到Impala查询转换

时间:2017-12-02 01:46:58

标签: sql oracle hadoop impala

我们正在从Oracle迁移到Hadoop,我试图将以下使用Oracle sql编写的查询转换为Impala sql:

CASE WHEN UPPER(table1.ACC_NBR) = LOWER(table1.ACC_NBR) THEN SUBSTR(table1.ACC_NBR,5,1)||'-'||SUBSTR(table1.ACC_NBR,8,2)||'-'|| SUBSTR(table1.ACC_NBR,10,3)||'-'||SUBSTR(table1.ACC_NBR,13,6) ELSE SUBSTR(table1.ACC_NBR,5,1)||'-'||SUBSTR(table1.ACC_NBR,6,2)||'-' || SUBSTR(table1.ACC_NBR,10,2)||'-'||SUBSTR(table1.ACC_NBR,13,6) END

我在Business object Universe Designing工具中使用此查询,它给了我错误

  

SUBSTR(table1.ACC_NBR,5,1)或||' - ' ||是一个布尔预期字符串

。有人可以查看查询,看看有什么缺失或额外的。

先谢谢。

1 个答案:

答案 0 :(得分:0)

||在impala中未被识别为连接运算符。请改用CONCAT功能。

CASE
   WHEN
      UPPER(table1.ACC_NBR) = LOWER(table1.ACC_NBR) 
   THEN
      CONCAT ( SUBSTR(table1.ACC_NBR, 5, 1), '-', SUBSTR(table1.ACC_NBR, 8, 2), '-',
               SUBSTR(table1.ACC_NBR, 10, 3), '-', SUBSTR(table1.ACC_NBR, 13, 6) ) 
   ELSE
      CONCAT ( SUBSTR(table1.ACC_NBR, 5, 1), '-', SUBSTR(table1.ACC_NBR, 6, 2), '-' , 
               SUBSTR(table1.ACC_NBR, 10, 2), '-', SUBSTR(table1.ACC_NBR, 13, 6) ) 
END