2009-09-09 20 views
31

Zwykle instrukcja LIKE używana do sprawdzania wzorca jak dane.jak używać LIKE z nazwą kolumny

ex:

select * from table1 where name like 'ar%' 

Mój problem jest, aby używać jednej kolumnie tabeli z oświadczeniem podobne.

ex:

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

Zapytanie powyższych wyników błędu. jak używać danych z jednej kolumny w podobnym zapytaniu?

+0

Z komentarzem wykonane przez Arun, to dla MySQL ... – MatBailie

+0

Arun jak o zaakceptowaniu jakieś odpowiedzi? –

+0

Daj mu spokój, minęło tylko 40 minut, od kiedy zapytał! :) – MatBailie

Odpowiedz

40

Jesteś blisko.

Operator LIKE działa z ciągami znaków (CHAR, NVARCHAR itd.). więc trzeba concattenate się symbol '%' do napisu ...

MySQL Server:

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

Zastosowanie podobnych, jednakże często jest wolniejsze niż w przypadku innych operacji. Jest użyteczny, wydajny, elastyczny, ale ma zalety związane z wydajnością. Zostawię ci do innego tematu chociaż :)

+0

Mam błąd w następujący sposób BŁĄD 1064 (42000): Masz błąd w składni SQL; sprawdź instrukcję, która odpowiada twojej wersji serwera MySQL dla właściwej składni do użycia w pobliżu "+%" w wierszu 1 – ArK

+1

MySQL nie używa + jako operatora konkatenacji. Najwyraźniej jest to funkcja o nazwie concat() z różnymi funkcjami istniejącymi dla różnych typów danych ... – MatBailie

+0

Pozdrawiam, że zacząłem swoją odpowiedź od "jesteś blisko", w przeciwieństwie do większości aroganckich ludzi, którzy lubią zniechęcać pple. tx –

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

Używam mysql, jego błąd dla mnie! – ArK

+0

Może potrzebujesz nawiasów? GDZIE table1.x LIKE (table2.y + '%') - lub może "||" zamiast "+" zgodnie ze standardem SQL. –

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

To powinno zoptymalizować zapytanie przez zawężenie wyszukiwania z pierwszej tabeli. – Koekiebox

20

SQL Server

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

pytanie dotyczyło mysql – caitriona

+5

Dziękujemy za odpowiedź na to pytanie w SERWERZE SQL. Pomimo komentarzy @ caitriona, ludzie używają innych baz danych i prawdopodobnie znaleźli ten wpis za pomocą Google – whiteshooz

Powiązane problemy