MSSQL wyszukwianie imienia i nazwiska

Odpowiedz Nowy wątek
2017-09-10 13:15

Rejestracja: 5 lat temu

Ostatnio: 5 miesięcy temu

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.

Pozostało 580 znaków

2017-09-10 13:57

Rejestracja: 2 lata temu

Ostatnio: 1 dzień temu

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?

Pozostało 580 znaków

2017-09-10 16:40

Rejestracja: 5 lat temu

Ostatnio: 5 miesięcy temu

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.

Pozostało 580 znaków

2017-09-10 18:37

Rejestracja: 7 lat temu

Ostatnio: 58 minut temu

0

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


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.

Pozostało 580 znaków

2017-09-10 18:56

Rejestracja: 2 lata temu

Ostatnio: 1 dzień temu

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.

Ale że niby jak cię uczono? 'wartość' IN ('zbiór wartości')... innej możliwości nie ma.. - Marcin.Miga 2017-09-10 21:05
Znałem konstrukcję WHERE kolumna in ('wartość1', 'wartość2'). Że można w "drugą stronę" (wartość in (kolumna1, kolumna2) załapałem dzisiaj. Jak widać człowiek uczy się całe życie. - Serechiel 2017-09-10 23:04

Pozostało 580 znaków

2017-09-10 19:11

Rejestracja: 5 lat temu

Ostatnio: 5 miesięcy temu

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%';
edytowany 3x, ostatnio: amatorek, 2017-09-10 19:13
My bad, działa. Zwracam honor. - Serechiel 2017-09-10 19:42

Pozostało 580 znaków

2017-09-10 19:51

Rejestracja: 2 lata temu

Ostatnio: 1 dzień temu

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.

Pozostało 580 znaków

2017-09-10 20:10

Rejestracja: 5 lat temu

Ostatnio: 5 miesięcy temu

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.

Pozostało 580 znaków

2017-09-11 00:00

Rejestracja: 2 lata temu

Ostatnio: 1 dzień temu

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.

Pozostało 580 znaków

2017-09-11 01:09
Moderator

Rejestracja: 12 lat temu

Ostatnio: 13 godzin temu

Lokalizacja: Wrocław

0

Może jednak fulltext search?


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2017-09-11 08:40

Rejestracja: 11 lat temu

Ostatnio: 6 godzin temu

0

A może tak:

WHERE imie + 'xxx' + nazwisko like '%michał%'

zamisat 'xxx' wstaw sobie znak, który na pewno nie wystapi w masce (enter, tab, albo cos poniżej chr(32))

Pozostało 580 znaków

Odpowiedz

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