2010-09-15 4 views
2

Есть ли что-то вроде ISNULL() ИЛИ COALESCE(), но не для проверки нулевого значения, но для пустого значения.ISNULL эквивалент для пустых полей

, например:

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 здесь не работают я не знаю, почему

+0

Я хотел был "IsNullOrEmpty()", как там находится в C#! Это может быть полезно. Да, я знаю, что вы можете создать скалярную функцию, но было бы неплохо, если бы она была родной, например ISNULL() и т. Д. Надеемся, что сотрудник MS в команде SQL читает это =) Но пока нам нужно сделать это вручную , как показывает ответ Андомара =/ – Losbear

ответ

8

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

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

Yess! Это именно то, что мне понадобилось – Agzam

+0

+1 для ввода быстрее меня: P –

1

Это будет поймать нулевой или пустой 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 
3

взгляд на NULLIF (Transact-SQL)

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

попробовать это:

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

вернет NULL, если cu.email и hu.email является любой комбинацией пустой строки или NULL