我需要能够处理Django中的Division By Zero
错误。以下SQL导致它:
select *, (available_credit * 100 / credit_limit)::integer as percent_available from
(SELECT
a.id,
在第一行,人们的credit limit
有时会为0,我希望能够处理这种情况,以便生成的percent_available
变量可以为0.
我试图用我鲜为人知的SQL找到修复程序,但它显然不起作用:
IF (credit_limit = 0)
0::integer as percent_available from
ELSE
(available_credit * 100 / credit_limit)::integer as percent_available from
(SELECT
a.id,
有可行的方法吗?
答案 0 :(得分:1)
如果您正在编写原始sql并且输出相当容易但是django需要一些工作,那么可以使用CASE,WHEN。
SELECT A.*, CASE WHEN credit_limit = 0 THEN 10000
ELSE
(available_credit * 100 / credit_limit)::integer
END as percent_available from
(SELECT
a.id, ....) AS A
当credit_limit为零时,将可用百分比报告为零将完全不正确。您应该以N / A或其他方式向用户报告。
回到django,你会使用CASE表达式。
Case()表达式与if中的if ... elif ... else语句类似 蟒蛇。计算所提供的When()对象中的每个条件 命令,直到一个人评估一个真实的价值。结果表达式 从匹配的When()对象返回。
现在假设您的模型名为Credit,则查询可能是。
Credit.objects.all().annotate(credit_available =
Case(
When(credit_limit = 0, Then value 10000)
default = F('available_credit')*100/F('credit_limit'))
)
答案 1 :(得分:0)
使用CASE
SELECT *, CASE WHEN (credit_limit = 0) THEN /* code */ ELSE /* code */ END AS
percent_available FROM ...