我们正在从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)或||' - ' ||是一个布尔预期字符串
。有人可以查看查询,看看有什么缺失或额外的。
先谢谢。
答案 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