2012-05-11 66 views
10

Mam tabelę z listą krajów. Powiedzmy, że jednym z tych krajów jest "Macedonia":SQL reverse LIKE

Jakie zapytanie SQL zwróci rekord "Macedonia", jeśli wyszukiwane jest hasło "Republika Macedonii"?

wierzę, że w LINQ to byłoby coś

var countryToSearch = "Republic of Macedonia"; 

var result = from c in Countries 
       where countryToSearch.Contains(c.cName) 
       select c; 

co teraz będzie odpowiednikiem SQL dla zapytania powyżej będzie?

gdyby było odwrotnie (czyli baza danych ma długą wersję nazwy kraju przechowywanej) poniższe zapytanie powinno działać:

Select * from country 
where country.Name LIKE (*Macedonia*) 

ale nie widzę w jaki sposób mogę to odwrócić.

Notatka: nazwy krajów w tabeli zawsze będzie skrócona wersja nazwy kraju

+0

Jaką bazę danych używasz? – Oded

+0

Używam programu SQL Server – jaja

+0

Ona chce coś takiego: http://sqlfiddle.com/#!3/f657d/11 – user1135357

Odpowiedz

7

Można użyć CHARINDEX do tego.

Select * from country 
where CHARINDEX(country.Name, 'Republic of Macedonia') > 0 
+0

dzięki .. to działa świetnie :) – jaja

7

Wystarczy odwrócić operatora (i naprawić składni)

Select * from country 
where 'Republic of Macedonia' LIKE CONCAT('%',country.Name,'%') 
+1

+1: Kto to zajął? * (Powinien określać MySQL, ponieważ op nie określił, który RDBMS, ale na pewno działa! I może być dostosowany do SQL Server ...) * – MatBailie

+1

Napisałem odpowiedź, zanim było jasne, że jest to MSSQL - być może ludzie nie zapomnieli o MySQL-ism. –