Ich bin ziemlich neu in SQL und hoffe, dass mir hier jemand helfen kann.
Ich habe eine gespeicherte Prozedur, bei der ich einen anderen Wert übergeben möchte, je nachdem, ob eine Spalte ein bestimmtes Land enthält oder nicht.
Bisher habe ich nur CASE
verwendet, wenn ich nach einer Übereinstimmung mit einer bestimmten Zahl oder einem bestimmten Wert suchte, so dass ich mir nicht sicher bin. Kann mir jemand sagen, ob das Folgende gültig und richtig ist, oder lassen Sie mich wissen, wie ich dies richtig schreiben soll (nur bezüglich des Teils in Klammern)?
(CASE countries
WHEN LIKE '%'[email protected]+'%' THEN 'national'
ELSE 'regional') AS validity
Hinweise: @selCountry ist der Variablenname eines Landes. Länder können entweder leer sein, ein Land oder mehrere Länder, die durch Komma und Leerzeichen getrennt sind. Im Grunde möchte ich nur prüfen, ob Länder @selCountry enthalten, und wenn ja, setzen Sie die Gültigkeit auf 'national'.
Diese Syntax benötigen Sie:
CASE WHEN countries LIKE '%'[email protected]+'%' THEN 'national' ELSE 'regional' END
Obwohl ich das ursprüngliche Problem gelöst habe, würde ich es anders lösen, den Inhalt von @selcountry in eine Tabellenform aufteilen und sich daran anschließen.
Fügen Sie endlich eine END
vor dem Aliasnamen hinzu.
CASE WHEN countries LIKE '%'[email protected]+'%'
THEN 'national' ELSE 'regional'
END AS validity
Zum Beispiel:
SELECT CASE WHEN countries LIKE '%'[email protected]+'%'
THEN 'national' ELSE 'regional'
END AS validity
FROM TableName
Das können Sie auch so machen
select *
from table
where columnName like '%' + case when @varColumn is null then '' else @varColumn end + ' %'