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

pvabu6sv  于 12个月前  发布在  Mysql
关注(0)|答案(5)|浏览(649)

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

k5hmc34c

k5hmc34c1#

使用IFNULL:

IFNULL(expr1, 0)

来自文档:
如果expr 1不为NULL,则IFNULL()返回expr 1;否则返回expr 2。IFNULL()返回数值或字符串值,具体取决于使用它的上下文。

mbyulnm0

mbyulnm02#

您可以使用coalesce(column_name,0)而不仅仅是column_namecoalesce函数返回列表中的第一个非NULL值。
我应该提到,像这样的每行函数通常在可伸缩性方面存在问题。如果您认为您的数据库可能会变得相当大,那么通常最好使用额外的列和触发器将成本从select移动到insert/update
假设读数据库的次数比写数据库的次数多(大多数情况下都是这样),这就分摊了成本。

nle07wnf

nle07wnf3#

上面的答案对我来说都不完整。如果你的字段名为field,那么选择器应该是下面这个:

IFNULL(`field`,0) AS field

例如,在SELECT查询中:

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

希望这能帮助大家不要浪费时间。

uklbhaso

uklbhaso4#

你可以试试这样的

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

如果属性X是一个空字符串,则假设它为空,因此在此之后,您可以将其声明为零而不是最后一个值。在另一种情况下,它将保持其原始值。
不管怎样,只是给予另一种方式来做到这一点。

mftmpeh8

mftmpeh85#

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

相关问题