我在带有CASE WHEN子句的Hive中遇到过滤条件问题。以下是语句和错误:
声明:
select day
from db.tableName
where case when length(day) <> '19' then substr(day,1,19) else day end
错误:
org.apache.spark.sql.AnalysisException:过滤器表达式'CASE WHEN(NOT length(tableName。
day
)='19')THEN substring(tableName。day
,1,19) ELSE tableName。字符串类型的day
END'不是布尔值。;;
如果我将case子句放在select
子句中,则该语句可以完美运行,但是放在条件会导致上述错误的地方。尽管我捕获的错误来自Zeppelin
,但Beeline
上的字符串类型错误也不是布尔值。
关于这个问题有什么建议吗?
答案 0 :(得分:0)
您的语法错误。您不必在这里使用WHERE子句。
尝试以下操作:
select case
when length(day) <> '19' then substr(day,1,19)
else day
end
from db.tableName;