MSSQL wyszukwianie imienia i nazwiska

0

Witam potrzebuję pomocy przy mssql.
Potrzebuję wyszukiwarki po imieniu i nazwisku.
Tabela składa się z ID, imie i nazwiska.

Szukam np.

tak: select * from Table1 where NAZWISKO LIKE '%kow%';

Ale potrzebuję, żeby szukać po imieniu i nazwisku i tak doszedłem do polecenia:

select * from Table1 where 'Michał' in (imie, nazwisko,imie+' '+nazwisko, nazwisko + ' ' + imie);

To mi wyszukuje po imie, nazwisku lub imieniu i nazwisku.
Jak wprowadzić do tego zapytania LIKE tak aby szukało mi również nazwisk imion zawierajacych jakąś frazę np. "kow" bo teraz jak nie ma takeigo nazwiska to nic nie wyszukuje a chciałbym aby zwracało kowalski.

0

Ja wiem że "polska język trudna bardzo", ale mógłbyś trochę wysiłku włożyć w poprawne napisanie posta.

Potrzebuję wyszukiwarki po imieniu i nazwisku.

Zwykłe AND nie wystarczy?

0

Dziękuje za zwrócenie uwagi na język.
Miałem to zrobione na OR'ach, ale szukam jak najlepiej zoptymalizować zapytanie gdybym jeszcze chciał szukać w trzeciej kolumnie np. drugie imię.
Przedstawiony kod przeze mnie działa tylko jak w niego wrzucić jeszcze LIKE, celem wyszukiwania o części nazwiska.

0

where imie||nazwisko like '%mich%' tylko tu nie ma mowy o jakiejkolwiek optymalizacji bo wyszukiwanie like '%tekst%' nie używa indeksu

0

Tak "bajdełejem":

SELECT * FROM Table1 WHERE 'Michał' IN (imie, nazwisko,imie+' '+nazwisko, nazwisko + ' ' + imie);

Wątpię, by takie zapytanie przeszło. Mnie uczono, że WHERE ... IN używa się nieco inaczej.

0
Serechiel napisał(a):

Tak "bajdełejem":

SELECT * FROM Table1 WHERE 'Michał' IN (imie, nazwisko,imie+' '+nazwisko, nazwisko + ' ' + imie);

Wątpię, by takie zapytanie przeszło. Mnie uczono, że WHERE ... IN używa się nieco inaczej.

Przechodzi i działa dla: Jan, Kowalski, Jan Kowalski, Kowalski Jan i to jest ok tylko like bym chciał jakoś ładnie w to dodać.

abrakadaber napisał(a):

where imie||nazwisko like '%mich%' tylko tu nie ma mowy o jakiejkolwiek optymalizacji bo wyszukiwanie like '%tekst%' nie używa indeksu

Nie działa chyba, że nie rozumiem

select * from Table1 where imie || nazwisko like '%mich%';
0

Nie działa chyba, że nie rozumiem

SELECT * FROM Table1 WHERE imie || nazwisko LIKE '%mich%';

Ale chyba nie zadajesz bazie takiego pytania? "Lub" pisze i używa się nieco inaczej.

0
Serechiel napisał(a):

Nie działa chyba, że nie rozumiem

SELECT * FROM Table1 WHERE imie || nazwisko LIKE '%mich%';

Ale chyba nie zadajesz bazie takiego pytania? "Lub" pisze i używa się nieco inaczej.

Oczywiście, że nie zadaje. Taki pseudo kod.
Żeby nie było:

SELECT * Table1 WHERE imie LIKE '%mich%' or nazwisko LIKE '%mich%';

A nie napisałem też precyzyjnie co nie działa.
Chodzi, że jak to jeszcze rozbić w przypadku gdy ktoś wpisze "Jan Kowalski" to go znajdzie.

0

A nie napisałem też precyzyjnie co nie działa.
Chodzi, że jak to jeszcze rozbić w przypadku gdy ktoś wpisze "Jan Kowalski" to go znajdzie.

Chwila, bo nie wiem czy dobrze łapię. Chcesz by klient został poproszony o podanie imienia lub nazwiska, wpisał obie wartości w jedno pole, a baza mu wypluła żądana wartość? Nie jestem pewien czy podaną wyżej metodą (like) jest to wykonalne, albowiem nie mogę nijakiego wzorca stąd dopasować.

SELECT * FROM Table1 WHERE 'Michał' IN (imie, nazwisko,imie+' '+nazwisko, nazwisko + ' ' + imie);

To mi wyszukuje po imie, nazwisku lub imieniu i nazwisku.
Jak wprowadzić do tego zapytania LIKE tak aby szukało mi również nazwisk imion zawierajacych jakąś frazę np. "kow" bo teraz jak nie ma takeigo nazwiska to nic nie wyszukuje a chciałbym aby zwracało kowalski.

https://stackoverflow.com/que[...]ng-like-and-in-for-sql-server
https://stackoverflow.com/que[...]ination-of-like-and-in-in-sql

Do podanego zapytania like wprowadzić się nie da. Albo where in, albo like.

0

Może jednak fulltext search?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0