TwojePC.pl © 2001 - 2024
|
|
A R C H I W A L N A W I A D O M O Ś Ć |
|
|
|
[SQL] Szukanie case insensitive , belzee 28/04/07 21:59 Pora pozna wiec bez owijania: jest tabela, w niej pole w ktorym sa duze i male litery (jak w zdaniu). Jak napisac procedure/zapytanie szukania zeby po wpisaniu szukanego tekstu malymi literami zwracalo odpowiedni rekord ale w zapisie oryginalnym (male/duze)? probowalem szukany ciag konwertowac na male litery i w bazie uzyc LOWER , i mimo, ze dziala to zwraca cale pole jako male litery a ja potrzebuje jak w oryginale.
mam nadzieje, ze wyrazam sie zrozumiale? :)- Podałbyś nazwę bazy danych... , pachura 28/04/07 22:15
...bo wszak niemal w każdej funkcje nazywają się inaczej, nie mówiąc już o tym że procedury składowane pisze się w różnych językach (PL/SQL, TSQL etc.).
W Oracle napisałbyś np.:
select imie, UPPER(nazwisko) from osoby;
...i dostałbyś np.:
Jan KOWALSKI
Edgar GOSIEWSKI
Leon ZIEMNIACZEK
Nadmienię również że robienie formatowania w bazie danych zamiast we właściwej aplikacji jest mało eleganckie.- ... , belzee 28/04/07 22:23
baza danych jest txtdb (http://www.c-worker.ch/txtdbapi/index_eng.php). chyba jednak zle zrozumiales moj problem. nie chodzi mi o zwrocenie z bazy pola w UCASE czy LCASE, lecz o uniezaleznienie sie podczas szukania od wielkosci liter zapisanych w bazie.
zalozmy ze w tabeli jest pole TYTUL w ktorym jest wpisany ciag 'Jakis tam tytulik'. chce napisac procedure szukajaca ktore niezaleznie od tego czy wpisze 'JAKIS*' czy 'Jakis*' lub 'jakis*' zwroci mi ow rekord, ale w zapisaie oryginalnym, bo teraz musze wpisywac literki w wielkosci identycznej jak zapisane w bazie.- No co za problem , pachura 28/04/07 22:28
select * from osoby where UPPER(nazwisko) like 'KOWALSK%'
Może ten zewnętrzny parametr wrzucasz źle - nie zamieniwszy go na duże litery? Wówczas takie coś musi zadziałać:
select * from osoby where UPPER(nazwisko) like UPPER('kOwALsKi%')- zdecydowanie , bwana 28/04/07 22:32
nawiasem, widzę, że oraklem pojechałeś:)"you don't need your smile when I cut
your throat"
- hmm ale czym to wybierasz? , Wedrowiec 28/04/07 23:45
daj sql'a;) jak like bierze pod uwagę wielkość znaków to poszukaj czegoś typu ilike (postgres). Jak jest w tej bazie - nie mam pojęcia ale może chodzić o to :)"Widziałem podręczniki
Gdzie jest czarno na białym
Że jesteście po**bani" - ... , belzee 29/04/07 00:05
w polu jest wartosc 'AaA'.
wykonuje zapytanie "SELECT * FROM porady WHERE tytul like '%AaA%' ORDER BY id DESC" - znaleziono
wykonuje zapytanie "SELECT * FROM porady WHERE tytul like '%aaa%' ORDER BY id DESC" - nie znaleziono
wykonuje zapytanie "SELECT * FROM porady WHERE tytul like '%Aaa%' ORDER BY id DESC" - nie znaleziono
wykonuje zapytanie "SELECT * FROM porady WHERE tytul like '%aaA%' ORDER BY id DESC" - nie znaleziono
wykonuje zapytanie "SELECT * FROM porady WHERE UPPER(tytul) like UPPER('%aAa%') ORDER BY id DESC" - znaleziono ALE zwrocony tytul jest postaci 'AAA', a ja potrzebuje jak w oryginale 'AaA'.
Wedrowiec, niestety w tej bazie nie ma ILIKE :/
chyba bede to musial jakos obejsc kilkoma zapytaniami...- no nie gadaj , bwana 29/04/07 00:26
"wykonuje zapytanie "SELECT * FROM porady WHERE UPPER(tytul) like UPPER('%aAa%') ORDER BY id DESC" - znaleziono ALE zwrocony tytul jest postaci 'AAA', a ja potrzebuje jak w oryginale 'AaA'" zwróci Ci wiersze spełniające warunek w postaci oryginalnej. To co opisałeś pewnie zapisane jest:
"SELECT upper(tytul) FROM porady WHERE UPPER(tytul) like UPPER('%aAa%') ORDER BY id DESC"
sprawdź no dobrze:-)"you don't need your smile when I cut
your throat" - bwana , belzee 29/04/07 08:12
nie mam co sprawdzac bo ctrl+c i ctrl+v chyba sie nie myli, co? :) btw. nie wiem czy zwrociles uwage, ale ja nie dzialam na rasowej bazie danych (mssql, mysql, postgre czy innej) tylko na bazie tekstowej z nieco uproszczona obsluga sql'a. mam zalaczyc zrzut ekranu? ;)- A zatem są 3 możliwości: , pachura 29/04/07 09:16
1. Przez pomyłkę zrobiłeś uppercase na danych przed umieszczeniem ich w bazie.
2. Twoja egzotyczna baza jest kompletnie niekompatybilna z najbardziej podstawową funkcjonalnością SQL-a.
3. Jednak coś pokręciłeś ;)
PS. A spróbuj "SELECT * FROM porady WHERE UPPER(tytul) like UPPER('%aAa%') ORDER BY id DESC" na innych tabelach, albo na innych kolumnach tekstowych w tej samej tabeli?- ... , belzee 29/04/07 10:48
1. nie ma takiej mozliwosci bo kiedy robie zwykly select * from... to dostaja to co chce
3. to jest tak banalne ze nie ma co pokrecic ;)
najbardziej prawdopodobna jest mozliwosc 2. problem w tym ze nie moge sie jej pozbyc ;)
dzieki za checi, postaram sie to jakos obejsc... - lub czwarta , bwana 29/04/07 11:41
gdzieś między zafeczowaniem wiersza z tabeli przez kursor, a wyświetleniem go poddany został konwersji do wielkich liter."you don't need your smile when I cut
your throat" - ... , belzee 29/04/07 19:06
pewnie tak, w koncu to nie rasowa baza tylko namiastka ;) kusi mnie aby napisac do autora i zglosic ten fakt.- SQLite , pachura 29/04/07 19:35
Przejdź na SQLite, na pewno działa i nie wymaga serwera. Zdaje się że jest automatycznie dołączany do PHP od którejśtam wersji.
Jednak moim zdaniem na 99% coś pokręciłeś, według mnie nie jest możliwe żeby nawet "namiastkowa" baza działała w taki sposób jak mówisz ;)- ... , belzee 29/04/07 22:35
sqlite... dobry pomysl, musze sie zapoznac... ;) - ... , belzee 1/05/07 11:43
niestety sqlite odpada :/
easyisp.pl nie obsluguje tej bazy. prawdziwy 'profeszynal prowajder'...
|
|
|
|
|
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL |
|
|
|
|