2010-09-15 40 views
2

Existe-t-il quelque chose comme ISNULL() ou COALESCE() mais qui ne vérifie pas la valeur null mais une valeur vide.Équivalent ISNULL pour les champs vides

par exemple:

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 

au lieu de retourner quatre colonnes, je voudrais obtenir trois et le troisième suppose d'avoir des valeurs soit de cu.email ou hu.email si le premier est vide! ISNULL et COALESCE ne fonctionnent pas ici, je ne sais pas pourquoi

+0

Je souhaite qu'il y ait un "IsNullOrEmpty()" comme il est en C#! Cela pourrait être utile. Oui, je sais que vous pouvez créer une fonction scalaire, mais ce serait bien s'il était natif, comme ISNULL(), etc. Espérons qu'un employé MS sur l'équipe SQL lit ceci =) Mais pour l'instant, nous devons le faire manuellement , comme la réponse de Andomar montre =/ – Losbear

Répondre

8

Vous pouvez toujours utiliser le cas:

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

Yess! C'est exactement ce dont j'avais besoin – Agzam

+0

+1 pour avoir tapé plus vite que moi: P –

1

Ce attrapera cu.email nul ou vide et utiliser à la place 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

regard sur NULLIF (Transact-SQL)

NULLIF retourne la première expression si les deux expressions ne sont pas égales. Si les expressions sont égales, NULLIF renvoie une valeur nulle du type de la première expression.

essayez ceci:

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

renverra NULL si cu.email et hu.email sont une combinaison de chaîne vide ou NULL