2014-05-07 24 views
9

Sono abbastanza nuovo per SQL e spero che qualcuno qui mi possa aiutare con questo.SQL Server: utilizzare CASE con LIKE

Ho una stored procedure in cui vorrei passare un valore diverso a seconda che una colonna contenga un determinato paese oppure no.

Finora ho utilizzato solo CASE per verificare la corrispondenza con un numero o un valore specifico, quindi non sono sicuro di questo. Qualcuno può dirmi se quanto segue è valido e corretto o fammi sapere come scrivere correttamente (solo per quanto riguarda la parte tra parentesi)?

(CASE countries 
    WHEN LIKE '%'[email protected]+'%' THEN 'national' 
    ELSE 'regional') AS validity 

Note: @selCountry è il nome della variabile di un paese, i paesi possono essere sia vuota, un paese o più paesi separati da virgola e lo spazio. Fondamentalmente voglio solo controllare se i paesi contengano @selCountry e in caso affermativo, impostare la validità su "nazionale".

risposta

14

Questa è la sintassi è necessario:

CASE WHEN countries LIKE '%'[email protected]+'%' THEN 'national' ELSE 'regional' END 

Anche se, secondo il vostro problema originale, mi piacerebbe risolvere in modo diverso, dividendo il contenuto di @selcountry int forma di tabella e unirsi ad esso.

+0

Grazie mille - funziona! – Mike

+0

si ... si ... si .. – Cloud

1

Aggiungi un END finalmente prima del nome alias.

CASE WHEN countries LIKE '%'[email protected]+'%' 
    THEN 'national' ELSE 'regional' 
END AS validity 

Ad esempio:

SELECT CASE WHEN countries LIKE '%'[email protected]+'%' 
     THEN 'national' ELSE 'regional' 
     END AS validity 
FROM TableName 
+0

Grazie anche per questo. – Mike

-4

Una delle prime cose che dovete conoscere SQL (e database relazionali) è che non si deve memorizzare i valori multipli in un singolo campo.

È necessario creare un'altra tabella e memorizzare un valore per riga.

Ciò renderà più semplice l'esecuzione delle query e migliorerà la struttura del database.

select 
    case when exists (select countryname from itemcountries where yourtable.id=itemcountries.id and countryname = @country) then 'national' else 'regional' end 
from yourtable 
+1

"Stai sbagliando" non è una risposta utile. Un commento utile, forse. – miken32

+0

@ miken32 Quando qualcuno, come l'OP, è "abbastanza nuovo per SQL", direi che "stai sbagliando" è la risposta più utile. – podiluska