Isnull эквивалент для пустых полей


Есть ли что-то вроде ISNULL() или COALESCE (), но не то, что проверяет значение null, а пустое значение.

Например:

  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.электронная почта или ху.электронная почта, если первая пуста! ISNULL и COALESCE здесь не работают я не знаю почему

3 2

3 ответа:

Вы всегда можете использовать case:

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

Посмотрите на NULLIF (Transact-SQL)

NULLIF возвращает первое выражение, Если эти два выражения не равны. Если выражения равны, функция nullif возвращает нулевое значение типа первое выражение.

Попробуйте это:

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

Вернет NULL, если cu.электронная почта и Ху.электронная почта-это любая комбинация пустой строки или NULL

Это будет ловить null или пустой cu.электронной почты и Ху.вместо электронной почты:

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