【问题标题】:MySQL: How can you update all NULL/blank values in return within the query?MySQL:如何在查询中更新所有 NULL/空白值作为返回值?
【发布时间】:2015-10-27 05:21:04
【问题描述】:

有没有办法将 MySQL 中以 NULL 或空白返回的任何返回值更新为“未知”或任何值?我的 NULL 和空白存在是因为我将很多表连接在一起,有时记录存在但为空白,有时其他表中根本不存在记录。

我不希望更新原始表,因为我不会在每次运行查询时都保存结果——我只是在发送报告之前将返回结果复制并粘贴到 Excel 中。

基本上,每天发送多次并粘贴到 Excel 中按 Ctrl+F 并将任何显示“NULL”的地方替换为“Unknown”然后再次执行此操作以将任何空白单元格替换为“Unknown”之后,这很烦人。”

环顾四周后,我发现 IFNULL 如果它是 NULL 但不是空白,它显然可以工作 - 但是 (1) 如果可能的话,不必用 IFNULLs 包装我的 SELECT 语句的每个部分会很棒,并且(2) 也用一些东西来包围空格。

只是希望我可以在查询末尾添加一些内容或我找不到的内容。但它可能只是不存在于我这样做的方式中。我不认为这个问题需要代码或模式,因为它具有一般性,但如果它有帮助,我当然很高兴能得到更具体的信息。谢谢!

【问题讨论】:

  • CASE 表达式是你的朋友。

标签: mysql null


【解决方案1】:

您可以将所有可能为 null 的列包装在一个 case 语句中,该语句在返回它们之前检查它们中的任何一个是否为 null 或空白。

例如:

SELECT
    CASE WHEN firsttable.column1 IS NULL or firsttable.column1 = '' THEN 'Unknown' ELSE firsttable.column1 END AS firsttable.column1
    CASE WHEN firsttable.column2 IS NULL or firsttable.column2 = '' THEN 'Unknown' ELSE firsttable.column2 END AS firsttable.column2
    CASE WHEN secondtable.column1 IS NULL or secondtable.column1 = '' THEN 'Unknown' ELSE secondtable.column1 END AS firsttable.column1
    CASE WHEN secondtable.column2 IS NULL or secondtable.column1 = '' THEN 'Unknown' ELSE secondtable.column2 END AS firsttable.column2
FROM
    firsttable,
    secondtable
WHERE
    firsttable.id = secondtable.firsttableid

【讨论】:

    【解决方案2】:

    您可以将 IF 与 COALESCE 结合使用:

    SET @val := '';
    select IF(COALESCE(@val,'')='','Unknown',@val);
    

    返回“未知”,同样将返回 NULL。将返回任何其他值:

    SET @val := 'test';
    select IF(COALESCE(@val,'')='','Unknown',@val);
    

    返回“测试”。

    技巧在COALESCE - 它返回第一个非空值,因此 COALESCE(NULL,'') 将返回 '' 并且 COALESCE('','') 也将返回 ''。您可以将变量 @val 替换为表或视图等中的任何列。

    【讨论】:

      猜你喜欢
      • 2015-06-17
      • 1970-01-01
      • 1970-01-01
      • 2016-06-29
      • 2013-11-26
      • 2014-04-09
      • 2019-10-01
      • 1970-01-01
      • 2014-11-16
      相关资源
      最近更新 更多