在选择查询中将NULL替换为空字符串的MySql查询

91

如何在SELECT语句中用空字符串替换NULL值?输出"NULL"值看起来不太专业。

这非常不寻常,根据我的语法,我希望它能工作。我希望有人解释一下为什么它不起作用。

select CASE prereq WHEN (prereq IS NULL) THEN " " ELSE prereq end from test;

原始表格的示例,我想要的内容以及实际打印出来的内容:

original     wanted      what actually prints
--------     ------      ---------------------
value1       value1      
NULL                     NULL
value2       value2      
NULL                     NULL

正如你所看到的,它执行的是我不想要的相反操作,因此我尝试将 IS NULL 反转为 IS NOT NULL,当然这没有解决问题。我还尝试交换 when case 的位置,但也没有奏效。

看起来下面给出的3个解决方案都可以完成任务。

select if(prereq IS NULL ," ",prereq ) from test
select IFNULL(prereq,"") from test
select coalesce(prereq, '') from test

2
我认为 (prereq IS NULL) 应该简写为 NULL - ScottJShea
11个回答

139

如果您确实需要输出每个值,包括NULL值:

select IFNULL(prereq,"") from test

如果您在使用groupBy时使用IFNULL,则应该有一个别名:select IFNULL(prereq,"") as n from test group by n。 - Salar

88
SELECT COALESCE(prereq, '') FROM test

Coalesce函数将从左到右返回第一个非空参数。如果所有参数都为空,它会返回null,但是我们在此强制使用空字符串,因此不会返回任何null值。

还要注意,标准SQL支持COALESCE运算符。而IFNULL则不然。因此,最好使用前者。此外,请记住COALESCE支持多个参数,并且会迭代这些参数,直到找到一个非null的情况为止。


1
值得注意的是,IFNULL 函数在 MySQL 中具有特殊性。它在 OP 的情况下可以工作,但在其他情况下可能不起作用。 - JScoobyCed

18

请尝试以下代码;

  select if(prereq IS NULL ," ",prereq ) from test

如何在空值时省略它?(不要选择它?) - Pathros

16

这些内置函数应该可以使用:

COALESCE(value,...)

返回列表中第一个非NULL值,如果没有非NULL值则返回NULL。 IS NULL 测试一个值是否为NULL。 IFNULL(expr1, expr2)
如果expr1不是NULL,则IFNULL()返回expr1;否则返回expr2。

9
select IFNULL(`prereq`,'') as ColumnName FROM test

这个查询正在选择 "prereq" 值,如果任何一个值为空,则显示一个空字符串,就像你想要的一样。因此,它显示所有值,但 NULL 值显示为空白。


2
考虑添加一份代码说明。代码示例可能会立即有用,但长远来看,解释更加有用。 - JustCarty

3
原始表格几乎完美,你只需要在 CASE 后省略 prereq 即可:
SELECT
  CASE
    WHEN prereq IS NULL THEN ' '
    ELSE prereq
  END AS prereq
FROM test;

2
尝试使用COALESCE函数。它会返回第一个非NULL值。
SELECT COALESCE(`prereq`, ' ') FROM `test`

0

试试这个,这也应该能去掉那些空行:

SELECT prereq FROM test WHERE prereq IS NOT NULL;

这是过滤输出,我认为原帖作者不是想要这个。 - Simon
这是我基于他的示例所提出的解决方案。我真的不明白为什么空行比NULL值更专业。 - Hunter McMillen

0
SELECT IF(TRIM(COALESCE(prereq, '')) = '', '[ empty ]', field1) FROM test 

查询将填充 '[ empty ]' 文本,其中 prereq 列为 null 或任意长度的空格

有关更多信息,请参见 TRIM COALESCEIS NULL

还可以参考 MySQL 文档中有关处理 null 值的 工作方式


-2

我在数据库的一个非必填字段中有空值(默认值为NULL)。它们不会导致网页上显示“null”这个值。但是,当通过网页输入表单创建数据时,“null”这个值会被放置在那里。这是由于JavaScript将null转录为字符串“null”,然后通过AJAX和jQuery提交数据。请确保这不是根本问题,因为仅仅做以上操作只是对实际问题的权宜之计。我还实施了以上解决方案IFNULL(...)作为双重措施。谢谢。


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