【问题标题】:SQL query that returns specific string if column is null?如果列为空,则返回特定字符串的 SQL 查询?
【发布时间】:2016-10-05 17:20:47
【问题描述】:

当 SQL 查询返回 null 时,我想知道是否可以让它返回一个特定的字符串,例如“Unknown”而不是 null。

我目前正在 JavaScript 端执行此操作,想知道是否有更快的方法在服务器上执行此操作。

示例(我意识到以下语法不存在):

SELECT Customers.Email (RETURN "Unknown" IF NULL)

我想有一个 CASE 可能吗?但是用 CASE 语句填充我的查询会减慢整个操作而不是加快它。

【问题讨论】:

  • Isnull 将完成这项工作
  • Coalesce 是标准功能

标签: mysql sql select null


【解决方案1】:

虽然COALESCE 是最好的解决方案,但也有CASE 如果您必须处理 null 或空字符串,这会很方便。

SELECT CASE Customers.Email
    WHEN NULL THEN 'Unknown'
    WHEN '' THEN 'Unknown'
    ELSE Customers.Email
    END AS Email
FROM Customers;

SELECT CASE
    WHEN Customers.Email IS NULL THEN 'Unknown'
    WHEN TRIM(Customers.Email) = '' THEN 'Unknown'
    ELSE Customers.Email
    END AS Email
FROM Customers;

【讨论】:

  • 为什么COALESCE 是最好的解决方案? IFNULL 看起来更简单,更容易阅读。
  • COALESCE: Returns the first non-NULL value in the list, or NULL if there are no non-NULL values. 您可以使用IFNULL 替换单个值,而COALESCE 获取一个列表,IFNULL(IFNULL(customer.email, customer.altemail),'unknown') 变为此COALESCE(customer.email, customer.altemail, 'unknown') 因为 COALESCE 更强大所以我总是使用它。到目前为止没有遇到任何性能影响。
【解决方案2】:

在 MySQL 中你可以使用IFNULL

SELECT IFNULL(Customers.Email, 'Unknown') AS Email 

【讨论】:

    【解决方案3】:

    你可以使用coalesce:

    SELECT COALESCE(email, 'Unknown')
    FROM   customers
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 2023-01-26
      • 1970-01-01
      • 2021-11-30
      相关资源
      最近更新 更多