选择使用 NVL 书写的字母。为啥?

Posted

技术标签:

【中文标题】选择使用 NVL 书写的字母。为啥?【英文标题】:Select using NVL wrote letters. Why?选择使用 NVL 书写的字母。为什么? 【发布时间】:2020-06-18 13:59:15 【问题描述】:

我写了这个选择:

    SELECT 
    nvl(SUM(vl_item),0)     AS SUM_VALOR_ITENS
   ,nvl(SUM(vl_discount),0) AS SUM_VALOR_DESCONTO
   ,nvl(SUM(qty_item) is null   ,0,0)    AS SUM_QTD_ITENS
   ,COUNT(DISTINCT cod_product_rms) AS QTD_ITENS_UNICOS
   FROM db.my_table
   where SAFRA = 202006

当我在 DBeaver 上运行时,结果是 0(零),正如我预期的那样。 但是,当我使用 Java 在 HQL 文件中运行此 SQL 时,结果分别为“0E-10”、“0E-18”和“0E-18”。 我不明白为什么我会收到这个结果。 有人可以帮助我吗?

【问题讨论】:

这能回答你的问题吗? Hive Converting from Double to String Not in Scientific Hive 正在将 double 转换为科学表示 好的,我现在明白了。现在的问题是:如何包含将 NULL 值转换为零整数(或十进制)的处理? 【参考方案1】:

我建议使用 coalesce,nvl 不适用于第 3 列,因为 NVL 只需要 2 个参数(这个需要 3 个),而 coalesce 可以随心所欲地使用。

    SELECT 
    coalesce(SUM(vl_item),0)     AS SUM_VALOR_ITENS
   ,coalesce(SUM(vl_discount),0) AS SUM_VALOR_DESCONTO
   ,coalesce(SUM(qty_item) is null   ,0,0)    AS SUM_QTD_ITENS
   ,COUNT(DISTINCT cod_product_rms) AS QTD_ITENS_UNICOS
   FROM db.my_table
   where SAFRA = 202006

【讨论】:

以上是关于选择使用 NVL 书写的字母。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

选择器的基本规则及使用

选择器的基本规则及使用

为啥 Oracle 的 DECODE 给我的价值与 NVL 不同?

在 JPQL 中选择 nvl(max(c.EmployeeId),0)?

为啥我们不能直接在循环中使用“innerHTML”函数而不是连接文本以获得垂直书写列表?

为啥“HTML 文件选择”会更改所选文件的顺序并按字母顺序排序?