在SELECT *语句中使用SQL IFNULL函数

5

在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

3
不,SQL 中没有这样的方法。 - Gordon Linoff
感谢反馈,对于其他看到这篇文章的人,我不能在每个项目上放置IFNULL的原因是因为我以ORM风格动态生成SQL,所以我不知道返回的列数或数据类型,但我会LEFT JOIN另一个表(例如一张日期表),并从动态表中进行select *。 - sabrams
3个回答

4

SQL中函数的结果是单个值(列),而不是列的列表。因此,不存在这样的结构,也不能存在。不幸的是,您必须逐个处理每个列。


3
虽然不是我期望的答案,但确实值得知道。 - sabrams

0

如果您不关心保留NULL,则可以向表中添加默认值:

ALTER TABLE yourTable ALTER foo SET DEFAULT 0;

你也可以创建一个视图,在其中编写每个IFNULL()语句,然后只需使用它来避免重复输入。

但正如其他人所指出的那样,没有像你希望的那样简单地执行它的结构。

您还可以使用表元数据快速执行此类重复性操作:

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

1
不幸的是,在我的选择中有许多计算值,并且有一些表格中我希望表格中有空值,但在生成的报告中却不想要。 - sabrams

-1

您可以尝试以下 SQL 的 case 语句:

    select 
CASE 
  WHEN foo is null THEN 0  else foo end

  from urtable

之后同样适用于其他列


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接