SQL SELECT * 语句上的 IFNULL

SQL IFNULL on SELECT * statement

有没有办法为所有返回的空值设置默认值,特别是在 MySql 中?

而不是

SELECT 
  IFNULL(foo, 0),
  IFNULL(bar, 0),
  IFNULL(baz, 0)
FROM table

我想做这样的事情:

SELECT IFNULL(*, 0)
FROM table

// this does not work, but I'm looking for something like it

SQL 中函数的结果是单个值(列),而不是列列表。所以没有,也不可能有这样的结构。不幸的是,您必须单独处理每一列。

如果您不关心保留 NULL,您可以将默认值添加到 table:

ALTER TABLE yourTable ALTER foo SET DEFAULT 0;

您还可以创建一个视图,在其中将每个 IFNULL() 语句写出一次,然后使用它来避免一直重新输入它。

但正如其他人所指出的,没有结构可以像您希望的那样简单地做到这一点。

您还可以使用 table 元数据快速执行类似这样的重复操作:

SELECT CONCAT("IFNULL(",`COLUMN_NAME`,",0)")
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA`='yourdatabasename' 
    AND `TABLE_NAME`='yourtablename';

您可以尝试 sql 的 case 语句,如下所示

    select 
CASE 
  WHEN foo is null THEN 0  else foo end

  from urtable

其他列也一样