如何解决服务器端的Firebird计算计算字段
SQL和开发方面的新手,我通常有一个表(COUNTRIES),其中包含字段(INDEX,NAME,POPULATION,AREA) 通常我会添加客户端(Delphi)计算字段(DENSITY)和OnCalcField:
COUNTRIES.DENSITY=COUNTRIES.POPULATION / COUNTRIES.AREA
尝试更改为Firebird计算字段以在服务器端完成所有计算,我在IBEXPERT“计算源”列中创建了一个名为density的字段:
ADD DENSITY COMPUTED BY ((((COUNTRIES.POPULATION/COUNTRIES.AREA))))
一切正常,但是当Record.AREA = 0时,我的除数为零。
我的问题是例如在IF THEN条件下如何避免这种情况,以避免在分频器为0时计算字段,或者在这种情况下使结果仅为= 0。
我的环境: Delphi RIO,Firebird 3.0,IBExpert
解决方法
您可以使用IIF()。当第一个参数为TRUE时,IIF返回第二个参数的值,否则返回第三个参数的值。
String
(请注意,我也删除了一些多余的括号)
在处理被零除时,我建议返回NULL(而不是零),并简单使用NULLIF(当两个输入参数相等时,内部函数将返回null):
ADD DENSITY COMPUTED BY (IIF(COUNTRIES.AREA = 0,COUNTRIES.POPULATION / COUNTRIES.AREA))
也就是说:当COUNTRIES.AREA = 0时,整个除法运算也将为空。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。