2009-09-09 12 views
31

Normalerweise LIKE-Anweisung verwendet, um das Muster wie Daten zu überprüfen.Wie verwendet man LIKE mit Spaltenname

ex:

select * from table1 where name like 'ar%' 

Mein Problem ist, eine Spalte der Tabelle mit LIKE-Anweisung zu verwenden.

ex:

select * from table1, table2 where table1.x is like table2.y% 

Abfrage obigen Ergebnisse Fehler. Wie verwendet man eine Spalte in einer ähnlichen Abfrage?

+0

Von einem Kommentar aber :) die für ein anderes Thema verlassen von Arun gemacht, das ist für MySQL ... – MatBailie

+0

Arun wie über Sie einige Antworten akzeptieren? –

+0

Gib ihm eine Pause, es sind nur 40 Minuten seit er gefragt hat! :) – MatBailie

Antwort

40

Sie sind in der Nähe.

Der LIKE-Operator arbeitet mit Strings (CHAR, NVARCHAR, usw.). so müssen Sie das Symbol '%' auf die Zeichenfolge concattenate ...

MySQL Server:

SELECT * FROM table1,table2 WHERE table1.x LIKE CONCAT(table2.y, '%') 

Verwendung von LIKE, aber oft langsamer als andere Operationen. Es ist nützlich, leistungsfähig, flexibel, hat aber Leistungsaspekte. Ich werde

+0

Ich habe Fehler wie folgt Fehler 1064 (42000): Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, damit die richtige Syntax in der Nähe von '+%' in Zeile 1 verwendet werden kann. – ArK

+1

MySQL verwendet + nicht als Verkettungsoperator. Offenbar ist es eine Funktion namens concat() mit verschiedenen Funktionen für verschiedene Datentypen ... – MatBailie

+0

Ablehnen Sie Ihre Antwort mit "Sie sind in der Nähe" im Gegensatz zu den meisten arroganten Menschen hier, die gerne entmutigen pple. tx –

4
... 
WHERE table1.x LIKE table2.y + '%' 
+0

ich benutze mysql, seine Fehlerantwort für mich !! – ArK

+0

Vielleicht brauchen Sie Klammern? WHERE table1.x LIKE (table2.y + '%') - oder vielleicht "||" anstelle von "+" gemäß dem SQL-Standard. –

3
declare @LkeVal as Varchar(100) 
declare @LkeSelect Varchar(100) 

Set @LkeSelect = (select top 1 <column> from <table> where <column> = 'value') 
Set @LkeVal = '%' + @LkeSelect 

select * from <table2> where <column2> like(''[email protected]+''); 
+0

Dies sollte die Abfrage optimieren, indem Sie die Suche aus der ersten Tabelle einschränken. – Koekiebox

20

SQL SERVER

WHERE ColumnName LIKE '%'+ColumnName+'%' 
+0

die Frage war für mysql – caitriona

+5

Danke, dass Sie auch dies in SQL Server beantworten. Trotz der Kommentare von @ caitriona verwenden die Leute tatsächlich andere DBs und haben diesen Beitrag möglicherweise mit Google gefunden – whiteshooz

Verwandte Themen