【问题标题】:MySql Query Replace NULL with Empty String in SelectMySql查询在Select中用空字符串替换NULL
【发布时间】:2012-03-22 13:48:15
【问题描述】:

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

【问题讨论】:

  • 我认为(prereq IS NULL) 应该只是阅读NULL

标签: mysql string replace null


【解决方案1】:

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

SELECT prereq FROM test WHERE prereq IS NOT NULL;

【讨论】:

  • 这是过滤我不认为 OP 之后的输出
  • 这是我基于他的例子的解决方案。我真的不明白空行比 NULL 值更专业的原因。
【解决方案2】:

试试下面;

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

【讨论】:

  • null 时如何省略? (不选择它?)
【解决方案3】:

试试COALESCE。它返回第一个非 NULL 值。

SELECT COALESCE(`prereq`, ' ') FROM `test`

【讨论】:

    【解决方案4】:
    SELECT COALESCE(prereq, '') FROM test
    

    Coalesce 将返回从左到右传递给它的第一个非空参数。如果所有的争论都是空的,它会返回空,但我们在那儿强制一个空字符串,所以不会返回空值。

    另请注意,标准 SQL 支持 COALESCE 运算符。 IFNULL 的情况并非如此。因此,使用前者是一个好习惯。此外,请记住,COALESCE 支持超过 2 个参数,它会遍历它们,直到找到非空重合。

    【讨论】:

    • 同意 IFNULL 的 MySQL 特性值得注意。它适用于 OP 案例,但可能不适用于其他案例。
    【解决方案5】:

    如果你真的必须输出每个值,包括 NULL 值:

    select IFNULL(prereq,"") from test
    

    【讨论】:

    • 如果你使用 IFNULL 和 groupBy,那么应该有一个别名:select IFNULL(prereq,"") as n from test group by n.
    【解决方案6】:

    其中一些内置函数应该可以工作:

    COALESCE(值,...)

    返回列表中的第一个非 NULL 值,如果没有非 NULL 值,则返回 NULL。

    IS NULL

    测试一个值是否为NULL。

    IFNULL(expr1,expr2)

    如果 expr1 不为 NULL,IFNULL() 返回 expr1;否则返回 expr2。

    【讨论】:

      【解决方案7】:

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

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

      【讨论】:

        【解决方案8】:

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

        【讨论】:

          【解决方案9】:
          UPDATE your_table set your_field="" where your_field is null
          

          【讨论】:

          • 我没有很好地理解这个问题,对不起!这用空值替换空值,但要解决您的问题,请检查我的第二个答案。
          【解决方案10】:
          select IFNULL(`prereq`,'') as ColumnName FROM test
          

          此查询正在选择“prereq”值,如果任何一个值为 null,它会根据需要显示一个空字符串 因此,它显示所有值,但 NULL 显示为空白

          【讨论】:

          • 考虑添加对这段代码的作用的解释。代码示例可能会立即有用,但从长远来看,解释会更有用。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-27
          • 2012-07-23
          • 2020-09-08
          • 2023-03-26
          • 1970-01-01
          • 2016-06-26
          • 1970-01-01
          相关资源
          最近更新 更多