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

时间:2010-10-22 13:38:16

标签: sql mysql

在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;

数据输出正常,但NULL字段应为0

如何在MySQL中为NULL返回0?

6 个答案:

答案 0 :(得分:268)

使用IFNULL

IFNULL(expr1, 0)

来自文档:

  

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

答案 1 :(得分:22)

您可以使用coalesce(column_name,0)代替column_namecoalesce函数返回列表中的第一个非NULL值。

我应该提一下,像这样的每行函数通常会对可伸缩性产生影响。如果您认为数据库的大小合适,通常最好使用额外的列和触发器将成本从select转移到insert/update

假设您的数据库读取的次数多于写入的(并且大部分都是),这会降低成本。

答案 2 :(得分:5)

以上所有答案对我来说都不完整。 如果您的字段名为field,则选择器应为以下选择器:

IFNULL(`field`,0) AS field

例如在SELECT查询中:

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

希望这可以帮助别人不要浪费时间。

答案 3 :(得分:4)

您可以尝试这样的事情

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

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

无论如何,只是为了给出另一种方式。

答案 4 :(得分:4)

是的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;

答案 5 :(得分:0)

尝试一下

从表名中选择Ifnull(sum(0 + ifnull(Mycolumn,0)),0)