【问题标题】:ISNULL equivalent for empty fieldsISNULL 等效于空字段
【发布时间】:2010-09-15 18:54:49
【问题描述】:

是否有类似 ISNULL() 或 COALESCE() 但不是检查空值而是检查空值。

例如:

  SELECT cu.last_name, cu.first_name, cu.email, hu.email FROM 
 (SELECT DISTINCT c.first_name, c.last_name, c.email, c.household_id, h.head_of_household_id
  FROM rd_customers c
  JOIN rd_households h ON c.household_id = h.household_id
  JOIN ad_registrations r ON r.customer_id = c.customer_id
  JOIN ad_meeting_times a ON  r.session_id = a.session_id and a.meeting_time_id = 203731) cu
  LEFT JOIN rd_customers hu ON hu.customer_id = cu.head_of_household_id

我想得到三列而不是返回四列,如果第一列是空的,第三列假设具有 cu.email 或 hu.email 的值! ISNULL 和 COALESCE 在这里不起作用,我不知道为什么

【问题讨论】:

  • 我希望有一个像 c# 中的“IsNullOrEmpty()”!这可能很有用。是的,我知道你可以创建一个标量函数,但如果是原生函数就好了,比如 ISNULL() 等。希望 SQL 团队的 MS 员工能读到这个 ​​=) 但现在,我们必须手动完成,就像 Andomar 的回答显示 =/

标签: sql sql-server-2005 coalesce isnull


【解决方案1】:

你总是可以用例:

select  case when cu.email is null or cu.email = '' then hu.email 
             else cu.email end as ColumnName
from    YourTable

【讨论】:

  • 是的!这正是我需要的
【解决方案2】:

NULLIF (Transact-SQL)

NULLIF 返回第一个表达式 if 两个表达式不相等。如果 表达式相等,NULLIF 返回类型为 null 的值 第一个表达式。

试试这个:

COALESCE(NULLIF(cu.email,''),NULLIF(hu.email,''))

如果 cu.email 和 hu.email 是空字符串或 NULL 的任意组合,将返回 NULL

【讨论】:

    【解决方案3】:

    这将捕获 null 或空 cu.email 并改用 hu.email:

    SELECT cu.last_name, 
           cu.first_name, 
           CASE WHEN ISNULL(cu.email, '') = '' THEN
                hu.email
           ELSE
                cu.email
           END AS email
    FROM 
    (
      SELECT DISTINCT c.first_name, 
                      c.last_name, 
                      c.email, 
                      c.household_id, 
                      h.head_of_household_id
      FROM rd_customers c
      JOIN rd_households h 
        ON c.household_id = h.household_id
      JOIN ad_registrations r 
        ON r.customer_id = c.customer_id
      JOIN ad_meeting_times a 
        ON  r.session_id = a.session_id 
          AND a.meeting_time_id = 203731
    ) cu
    LEFT JOIN rd_customers hu 
      ON hu.customer_id = cu.head_of_household_id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-22
      • 2010-09-15
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      相关资源
      最近更新 更多