2010-08-03 11 views
4

Je dois retourner l'une des 2 valeurs pour certaines conditions: Mes différents cas sont: lorsqu'une colonne a une 'sous-chaîne' sur la droite fin, renvoyez cette colonne. (C.-à-LIKE 'substring%) retour Else autre colonne (d'autre table)Comment vérifier une sous-chaîne dans une colonne, en utilisant CASE/IF (requête SQL)

Cela fonctionne:

SELECT * From Table1 where col1 is not null and col1 like '%substring' 

Cependant, cela ne fonctionne pas:

SELECT col5, 
CASE Table1.Col1 
    WHEN NULL Then Table2.Col2 
    WHEN '%substring' THEN Table1.Col1 
    ELSE Table2.Col2 
FROM Table1 
JOIN Tablex ON Tablex.colID= Tabley.colID 
JOIN Table1 ON Table1.colID = Tablex.colID 

et un groupe de plus de jointures pour des tables interreliées avec des clés étrangères avec table1/table2 ... Les résultats sont toujours renvoyés depuis la partie 'else'.

J'ai aussi essayé cela, cela ne fonctionne pas non plus:

SELECT col5, 
CASE Table1.Col1 
    WHEN NULL Then Table2.Col2 
    WHEN '' THEN Table2.Col2 
    ELSE Table1.col1 
FROM Table1 
JOIN Tablex ON Tablex.colID= Tabley.colID 
JOIN Table1 ON Table1.colID = Tablex.colID 

Répondre

6

besoin d'utiliser:

SELECT col5, 
     CASE 
     WHEN Table1.Col1 IS NULL Then Table2.Col2 
     WHEN Table1.Col1 LIKE '%substring' THEN Table1.Col1 
     ELSE Table2.Col2 
     END 
FROM Table1 
JOIN Tablex ON Tablex.colID= Tabley.colID 
JOIN Table1 ON Table1.colID = Tablex.colID 

CASE/QUAND expressions sont équivalentes à "=", spécifiant NULL si jamais évaluer correctement, car vous devez utiliser IS NULL. De même, ne peut pas supposer LIKE est utilisé ...

Vous manquiez également le mot-clé END pour signaler la fin de l'expression CASE. Notez que les types de données Table2.Col2 et Table1.Col1 sont identiques.