2016-06-21 13 views
-4

Ich schreibe ein Stück Code, wo @Variant zur Verfügung gestellt wird. Ich wollte mehrere Werte speichern, indem ich sie in eine Variable (Laufzeit) aufnehme und sie in der WHERE-Klausel übergebe. Teilen Sie die LogikLIKE Platzhalter in SQL

DECLARE @Variant VARCHAR(50) 
SET @Variant='''25'',''33''' 
SELECT @Variant ---- which is actually '25','33' 
SELECT 'TRUE' WHERE '25' IN (@Variant) 

DECLARE @Variant VARCHAR(50) 
SET @Variant='''25'',''33''' 
SELECT @Variant ---- which is actually '25','33' 
SELECT 'TRUE' WHERE '25' IN (SELECT @Variant) 

Above Anfragen nicht funktionieren ...

--DECLARE @Variant VARCHAR(50) 
--SET @Variant='''25'',''33''' 
--SELECT @Variant 
SELECT 'TRUE' WHERE '25' IN ('25','33') 

Oben ist eine einfachere Abfrage in SQL Server -die Ich habe versucht, wenn SQL akzeptiert. Meine tatsächliche Abfrage besteht darin, Platzhalter in der LIKE-Anweisung in der WHERE-Klausel zu übergeben.

DECLARE- @Variant VARCHAR (50) SET @Variant = ' '25%''‘OR [ITEM_NO] LIKE ''33%' '' SELECT @Variant
SELECT * FROM Tabelle1 WHERE [ITEM_NO] LIKE (@Variant) - Ich nehme an, dass @variable während der Ausführung durch ihren Wert ersetzt wird.

Wie auch immer, einfacher Weg - Ich habe eine Item_No in der Where-Klausel, an die ich mehrere Platzhalter liefern möchte. Gibt es eine ähnliche Methode wie die Inline-Funktion, die den Text in der @variant ersetzen und die Kombination ausführen soll?

+4

Markieren Sie die verwendeten dbms. (Dieser Code sieht überhaupt nicht wie ANSI SQL aus ...) – jarlh

+0

Das hat nichts mit 'LIKE' oder Wildcards zu tun. Fixiere die Tags bitte. – Pred

+0

Warum haben Sie 'Wildcard' und 'Like' getaggt? – kostas

Antwort

2
DECLARE @Variant VARCHAR(50) 
SET @Variant='''25'',''33''' 

An diesem Punkt @Variant enthält einen einzelnen String.

SELECT 'TRUE' WHERE '25' IN (@Variant) 

tut der 25 Da nicht gleich '25','33' dies nie passen wird. (IN sucht nach einer genauen Übereinstimmung - Gleichheit - mit mindestens einem der in den Klammern angegebenen Werte.)

SQL wird eine Zeichenfolge nicht magisch in eine Sammlung analysieren. Du musst es ihm sagen. Welche Optionen dafür erforderlich sind, hängt vom verwendeten DBMS ab. Sie enthalten temporäre Tabellen und Tabellenwerte.

+0

Danke Richard - deine Erklärung "Angesichts der 25 ist nicht gleich '25', '33' wird das nie zusammenpassen" – Ravi

0

SQLLike Zustand wird in Ihrem Szenario funktionieren.

DECLARE @Variant VARCHAR(50) 
SET @Variant='''25'',''33''' 

SELECT 'TRUE' WHERE @Variant like '%25%' 

Hier ist das Ergebnis TRUE. Hoffe, das wird helfen.

+1

Und was ist wenn '@Variant = '25, 33,255,256''? – sagi