提问人:Stalkium 提问时间:10/1/2020 最后编辑:Mark RotteveelStalkium 更新时间:10/1/2020 访问量:1736
服务器端的 Firebird 计算(计算)字段
Firebird computed (calculated) field on server side
问:
一般是 SQL 和开发的新手,我有一个带有字段(INDEX、NAME、POPULATION、AREA)的表 (COUNTRIES) 通常我添加一个客户端(Delphi)计算字段(DENSITY)和OnCalcField:
COUNTRIES.DENSITY=COUNTRIES.POPULATION / COUNTRIES.AREA
尝试更改为 Firebird 计算字段以在服务器端完成所有计算,我创建了一个名为 density 的字段,并在 IBEXPERT 的“计算源”列中:
ADD DENSITY COMPUTED BY ((((COUNTRIES.POPULATION/COUNTRIES.AREA))))
一切正常,但是当 Record.AREA = 0 时,我有一个除以零错误。
我的问题是如何避免这种情况,例如,使用 IF THEN 条件以避免在除法线为 0 时计算字段,或者在这种情况下使结果仅 =0。
我的环境 : 德尔福 RIO、Firebird 3.0、IBExpert
答:
7赞
zorancz
10/1/2020
#1
您可以使用 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))
也就是说:当国家。AREA = 0,则整个除法运算也会导致 null。
下一个:基于元素宽度的 CSS 媒体查询
评论
ADD DENSITY COMPUTED BY (CASE WHEN COUNTRIES.AREA = 0 THEN 0 ELSE COUNTRIES.POPULATION / COUNTRIES.AREA END)