首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务器端的Firebird计算(计算)字段

服务器端的Firebird计算(计算)字段
EN

Stack Overflow用户
提问于 2020-10-01 07:54:27
回答 1查看 389关注 0票数 3

新手在SQL和开发一般情况下,我有一个表(国家)与字段(索引,名称,人口,面积)通常我添加一个客户端(Delphi)计算字段(密度)和OnCalcField:

代码语言:javascript
复制
COUNTRIES.DENSITY=COUNTRIES.POPULATION / COUNTRIES.AREA

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

代码语言:javascript
复制
ADD DENSITY COMPUTED BY ((((COUNTRIES.POPULATION/COUNTRIES.AREA))))

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-01 14:22:56

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

代码语言:javascript
复制
ADD DENSITY COMPUTED BY (IIF(COUNTRIES.AREA = 0, 0, COUNTRIES.POPULATION / COUNTRIES.AREA))

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

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

代码语言:javascript
复制
ADD DENSITY COMPUTED BY (COUNTRIES.POPULATION / nullif(COUNTRIES.AREA, 0))

也就是说:当COUNTRIES.AREA =0时,整个除法操作也会导致null。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64147298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档