选择使用 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)?