3

一般的 SQL 和开发新手,我有一个包含字段(INDEX、NAME、POPULATION、AREA)的表(COUNTRIES)通常我添加一个客户端(Delphi)计算字段(DENSITY)和 OnCalcField:

COUNTRIES.DENSITY=COUNTRIES.POPULATION / COUNTRIES.AREA

尝试更改为 Firebird 计算字段以在服务器端完成所有计算,我创建了一个名为密度的字段,并在 IBEXPERT“计算源”列中:

ADD DENSITY COMPUTED BY ((((COUNTRIES.POPULATION/COUNTRIES.AREA))))

一切正常,但是当 Record.AREA = 0 我有除以零错误。

我的问题是如何避免这种情况,例如使用 IF THEN 条件来避免在除数为 0 时计算字段或在这种情况下使结果 = 0。

我的环境:Delphi RIO、Firebird 3.0、IBExpert

4

1 回答 1

5

您可以使用 IIF()。当第一个参数为 TRUE 时,IIF 返回第二个参数的值,否则返回第三个参数的值。

ADD DENSITY COMPUTED BY (IIF(COUNTRIES.AREA = 0, 0, COUNTRIES.POPULATION / COUNTRIES.AREA))

(注意我还删除了一些额外的括号)

在处理除以零时,我建议返回 NULL(而不是零),并简单地使用 NULLIF(当两个输入参数相等时返回 null 的内部函数):

ADD DENSITY COMPUTED BY (COUNTRIES.POPULATION / nullif(COUNTRIES.AREA, 0))

即:当 COUNTRIES.AREA = 0 时,整个除法运算也为空。

于 2020-10-01T06:22:55.753 回答