如果字段在MySQL中为空,则返回0

在MySQL中,是否有一种方法来设置“total”字段为零,如果他们是NULL?

以下是我所拥有的:

SELECT uo.order_id, uo.order_total, uo.order_status,
(SELECT SUM(uop.price * uop.qty)
FROM uc_order_products uop
WHERE uo.order_id = uop.order_id
) AS products_subtotal,
(SELECT SUM(upr.amount)
FROM uc_payment_receipts upr
WHERE uo.order_id = upr.order_id
) AS payment_received,
(SELECT SUM(uoli.amount)
FROM uc_order_line_items uoli
WHERE uo.order_id = uoli.order_id
) AS line_item_subtotal
FROM uc_orders uo
WHERE uo.order_status NOT IN ("future", "canceled")
AND uo.uid = 4172;

除了NULL字段应该是0之外,数据输出正常。

如何在MySQL中为NULL返回0 ?

299743 次浏览

使用IFNULL:

IFNULL(expr1, 0)

从文档中可以看到:

如果expr1不是NULL, IFNULL()返回expr1;否则返回expr2。IFNULL()返回一个数字或字符串值,这取决于使用它的上下文。

你可以使用coalesce(column_name,0)而不是column_namecoalesce函数返回列表中的第一个非null值。

我应该提到,像这样的逐行函数对于可伸缩性来说通常是有问题的。如果你认为你的数据库可以达到一个合适的大小,通常最好使用额外的列和触发器来将开销从select移动到insert/update

假设数据库的读次数多于写次数(大多数都是这样),这就抵消了成本。

你可以尝试这样做

IFNULL(NULLIF(X, '' ), 0)

如果属性X是一个空字符串,则假定它为空,因此在此之后可以将其声明为零而不是最后一个值。在另一种情况下,它将保持其原始价值。

总之,这是另一种方法。

是IFNULL函数将工作以实现您想要的结果。

SELECT uo.order_id, uo.order_total, uo.order_status,
(SELECT IFNULL(SUM(uop.price * uop.qty),0)
FROM uc_order_products uop
WHERE uo.order_id = uop.order_id
) AS products_subtotal,
(SELECT IFNULL(SUM(upr.amount),0)
FROM uc_payment_receipts upr
WHERE uo.order_id = upr.order_id
) AS payment_received,
(SELECT IFNULL(SUM(uoli.amount),0)
FROM uc_order_line_items uoli
WHERE uo.order_id = uoli.order_id
) AS line_item_subtotal
FROM uc_orders uo
WHERE uo.order_status NOT IN ("future", "canceled")
AND uo.uid = 4172;
以上答案对我来说都不完整。 如果你的字段名为field,那么选择器应该是下面这个:

IFNULL(`field`,0) AS field

例如,在SELECT查询中:

SELECT IFNULL(`field`,0) AS field, `otherfield` FROM `mytable`

希望这能帮助一些人不浪费时间。