在MySQL中,如果它们是NULL,有没有办法将"total"字段设置为零?
这是我有的:
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;
Run Code Online (Sandbox Code Playgroud)
数据很好,除了NULL字段应该是0.
如何在MySQL中为NULL返回0?
Mar*_*ers 290
使用IFNULL:
IFNULL(expr1, 0)
Run Code Online (Sandbox Code Playgroud)
从文档:
如果expr1不为NULL,则IFNULL()返回expr1; 否则返回expr2.IFNULL()返回一个数值或字符串值,具体取决于使用它的上下文.
Gia*_*apa 10
以上所有答案都不适合我.如果您的字段已命名field,则选择器应为以下选项:
IFNULL(`field`,0) AS field
Run Code Online (Sandbox Code Playgroud)
例如,在SELECT查询中:
SELECT IFNULL(`field`,0) AS field, `otherfield` FROM `mytable`
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助别人不浪费时间.
你可以试试这样的
IFNULL(NULLIF(X, '' ), 0)
Run Code Online (Sandbox Code Playgroud)
如果属性 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;
Run Code Online (Sandbox Code Playgroud)