首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Impala不兼容的返回类型(万一有语句)

Impala不兼容的返回类型(万一有语句)
EN

Stack Overflow用户
提问于 2021-02-15 11:44:08
回答 2查看 2.3K关注 0票数 0

我正在运行Impala查询,并试图在语句中使用case:

代码语言:javascript
运行
复制
SELECT *,
CASE WHEN typ_prtctn  = 2 then  0.5*PRTCTN_ALLCTD_VL  -- life insurance policies pledged
WHEN typ_prtctn  = 18 then  2*PRTCTN_ALLCTD_VL  -- equity and investment funds shares
ELSE PRTCTN_ALLCTD_VL END as PROTECTION_VALUE
FROM database.tablename

它在抱怨

代码语言:javascript
运行
复制
AnalysisException: Incompatible return types 'DECIMAL(38,9)' and 'DECIMAL(38,10)' of exprs '0.5 * PRTCTN_ALLCTD_VL' and 'PRTCTN_ALLCTD_VL'.

不过,这样做很好:

代码语言:javascript
运行
复制
SELECT *,
0.5*PRTCTN_ALLCTD_VL as test  
FROM database.tablename

如错误消息所示,PRTCTN_ALLCTD_VLdecimal(38,10)类型。如有任何建议,请见谅。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-15 12:56:23

这是一个很奇怪的问题,我是不会想到的。case表达式返回单个类型,因此所有条件都必须在表达式中转换为同一时间。

您可以使用显式类型转换来解决问题。我不确定这种类型应该是什么,所以我猜:

代码语言:javascript
运行
复制
(CASE WHEN typ_prtctn  = 2 
      THEN CAST(0.5 * PRTCTN_ALLCTD_VL AS DECIMAL(38, 10)) -- life insurance policies pledged
      WHEN typ_prtctn  = 18 
      THEN CAST(2 * PRTCTN_ALLCTD_VL AS DECIMAL(38, 10))  -- equity and investment funds shares
      ELSE CAST(PRTCTN_ALLCTD_VL as DECIMAL(38, 10))
 END) as PROTECTION_VALUE

我怀疑这是因为38是最大的精度。乘法可能改变了精度/比例尺,而且由于这个值已经具有最大的精度,因此存在一个问题。我不认为这种情况通常会发生在小数上。

票数 2
EN

Stack Overflow用户

发布于 2021-02-15 11:57:42

尝试将大小写强制转换为十进制。

代码语言:javascript
运行
复制
  SELECT *,
    CAST(CASE WHEN typ_prtctn  = 2 then  0.5*PRTCTN_ALLCTD_VL  -- life insurance policies pledged
            WHEN typ_prtctn  = 18 then  2*PRTCTN_ALLCTD_VL  -- equity and investment funds shares
        ELSE PRTCTN_ALLCTD_VL END as DECIMAL(10,4) ) AS  PROTECTION_VALUE

或者尝试将相同的数据类型应用于强制浮动的所有计算(1.0、2.0而不是2*和相同的值)

代码语言:javascript
运行
复制
CASE WHEN typ_prtctn  = 2 then  0.5*PRTCTN_ALLCTD_VL  -- life insurance policies pledged
WHEN typ_prtctn  = 18 then  2.0*PRTCTN_ALLCTD_VL  -- equity and investment funds shares
ELSE 1.0*PRTCTN_ALLCTD_VL END as PROTECTION_VALUE
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66207425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档