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
其他列也一样
有没有办法为所有返回的空值设置默认值,特别是在 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
其他列也一样