Mysql查询在选择中用空字符串替换NULL


70

如何用空字符串替换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 2012年

Answers:



111

如果确实必须输出所有值,包括NULL值:

select IFNULL(prereq,"") from test

如果您将IFNULL与groupBy一起使用,则应该有一个别名:从n的测试组中选择IFNULL(prereq,“”)作为n。
撒拉族(Salar)

82
SELECT COALESCE(prereq, '') FROM test

合并将返回从左到右传递给它的第一个非null参数。如果所有的争论都为空,它将返回空,但是我们在此处强制使用空字符串,因此不会返回任何空值。

另请注意,标准SQL支持COALESCE运算符。IFNULL不是这种情况。因此,使用前者是一个好习惯。此外,请记住,COALESCE支持两个以上的参数,它将在它们上进行迭代,直到找到非空的巧合为止。


1
同意值得注意的是IFNULL的MySQL特殊性。它适用于OP情况,但不适用于其他情况。
JScoobyCed 2013年

18

尝试下面;

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

空值时如何省略?(不选择它吗?)
Pathros 2015年

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

该查询选择“ prereq”值,如果其中任何一个为null,则显示一个空字符串,因此,它显示所有值,但NULL则显示为空白


2
考虑添加对此代码的作用的解释。代码示例可能会立即有用,但是从长远来看,进行解释会更加有用。
JustCarty

3

原始形式几乎完美,您只需要在CASE之后省略prereq即可

SELECT
  CASE
    WHEN prereq IS NULL THEN ' '
    ELSE prereq
  END AS prereq
FROM test;


0

试试这个,这也应该摆脱那些空行:

SELECT prereq FROM test WHERE prereq IS NOT NULL;

这正在过滤输出,我不认为OP会在此之后
Simon

这是基于他的示例的我的解决方案。我真的看不出空白行比NULL值更专业的原因。
亨特·麦克米伦

-1

我在数据库的非必填字段中有null(默认值为NULL)。它们不会使值“ null”显示在网页中。但是,在通过网页输入表单创建数据时,将放置“ null”值。这是由于JavaScript在通过AJAX和jQuery提交数据时采用null并将其转录为字符串“ null”。确保这不是基本问题,因为简单地执行上述操作只是解决实际问题的临时措施。我还实现了上述解决方案IFNULL(...)作为双重措施。谢谢。


-1

我知道这是一个老问题,但是我得到了没有更改查询的最佳解决方案,并且还支持SELECT *语句

foreach ($row as &$value) {
  if($value==null){
     $value="";
  }
}

既没有最佳解决方案, 也不是该解决方案适合OP的问题(关于SQL而不是JavaScript)。
Markus Safar

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.