web-dev-qa-db-fra.com

SQL Server: utilisez CASE avec LIKE

Je suis assez nouveau en SQL et j'espère que quelqu'un ici pourra m'aider avec cela. 

J'ai une procédure stockée dans laquelle je voudrais passer une valeur différente selon qu'une colonne contient un pays donné ou non. 

Jusqu'ici, je n'ai utilisé que CASE lors de la vérification de la correspondance avec un nombre ou une valeur spécifique, aussi je ne suis pas sûr de celui-ci. Est-ce que quelqu'un peut me dire si ce qui suit est valide et correct ou me laisser savoir comment l'écrire correctement (juste pour la partie entre parenthèses)?

(CASE countries
     WHEN LIKE '%'+@selCountry+'%' THEN 'national'
     ELSE 'regional') AS validity

Notes: @selCountry est le nom de variable d'un pays. Les pays peuvent être vides, un ou plusieurs pays séparés par une virgule et un espace. Fondamentalement, je veux juste vérifier si les pays contiennent @selCountry et si oui, définissez la validité sur «national».

15
Mike

C'est la syntaxe dont vous avez besoin:

CASE WHEN countries LIKE '%'+@selCountry+'%' THEN 'national' ELSE 'regional' END

Bien que, conformément à votre problème initial, je l’aie résolu différemment, en scindant le contenu de @selcountry dans un tableau et en le joignant.

28
dean

Ajoutez enfin une END avant le nom d'alias.

CASE WHEN countries LIKE '%'+@selCountry+'%' 
     THEN 'national' ELSE 'regional' 
END AS validity

Par exemple:

SELECT CASE WHEN countries LIKE '%'+@selCountry+'%' 
       THEN 'national' ELSE 'regional' 
       END AS validity
FROM TableName
1
Raging Bull