新手在SQL和开发一般情况下,我有一个表(国家)与字段(索引,名称,人口,面积)通常我添加一个客户端(Delphi)计算字段(密度)和OnCalcField:
COUNTRIES.DENSITY=COUNTRIES.POPULATION / COUNTRIES.AREA尝试更改为Firebird计算字段以在服务器端完成所有计算,我创建了一个名为density的字段,并在IBEXPERT的"Computed Source“列中:
ADD DENSITY COMPUTED BY ((((COUNTRIES.POPULATION/COUNTRIES.AREA))))一切正常,但当Record.AREA =0时,我有一个除以零的错误。
我的问题是如何避免这种情况,例如,使用IF THEN条件,以避免在除法器为0时计算字段,或者在这种情况下使结果仅=0。
我的环境: Delphi RIO、Firebird 3.0、IBExpert
发布于 2020-10-01 14:22:56
您可以使用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时,整个除法操作也会导致null。
https://stackoverflow.com/questions/64147298
复制相似问题