【问题标题】:NULLIF how to set it properly in this queryNULLIF 如何在此查询中正确设置它
【发布时间】:2020-03-10 23:32:29
【问题描述】:

我正在使用以下查询一目了然地了解一些表空间的使用情况:

db2 "select substr(tbsp_name,1,30) as Tablespace_Name, tbsp_type as Type, substr(tbsp_state,1,20) as Status, (tbsp_total_size_kb / 1024 ) as Size_Meg, smallint((float(tbsp_free_size_kb)/ float(tbsp_total_size_kb))*100) as Percent_Free_Space, int((tbsp_free_size_kb) / 1024 )as Meg_Free_Space from sysibmadm.tbsp_utilization where smallint((float(tbsp_free_size_kb)/ float(tbsp_total_size_kb))*100) < 20 order by Percent_Free_Space"

但是,我遇到了以下错误:

SQL0801N 已尝试除以零。 SQLSTATE=22012

我知道您可以使用 NULLIF 修复此错误,但是我找不到在查询中设置的正确方法,感谢您的帮助。

( 使用“DB2 v9.7.0.11”、“s150922”、“IP23937”和修复包 "11")

【问题讨论】:

    标签: db2 tablespace nullif


    【解决方案1】:

    也许你应该用例:

    CASE WHEN tbsp_total_size_kb=0 THEN NULL ELSE (tbsp_total_size_kb / 1024 ) END as Size_Meg
    

    如果tbsp_total_size_kb 可以像这样为空 IFNULL:

    CASE WHEN IFNULL(tbsp_total_size_kb,0)=0 THEN NULL ELSE (tbsp_total_size_kb / 1024 ) END as Size_Meg
    

    【讨论】:

    • 感谢您的评论兄弟,这个修改后的完整查询如何?再次感谢
    【解决方案2】:

    试试这个:

    smallint(float(tbsp_free_size_kb) / float(nullif(tbsp_total_size_kb, 0)) * 100)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 2018-12-16
      • 1970-01-01
      相关资源
      最近更新 更多