[ majak @ 09.12.2005. 10:51 ] @
Potrebno je da pretrazim jedno polje u tabeli i da mi upit
vrati sve redove bez obzira na velicinu slova.

komanda
"SELECT * FROM baza WHERE lower(naziv) LIKE '%"+f_code(lower(cTxt))+"%';"
nije upotrebljiva zato sto je polje 'naziv' sifrirano.

Neznam kako bih iskoristio funkciju f_decode().
Baza je SQLite.
Ako nije moguce, kako bi se isto resilo recimo ako bi tabela bila u access-u ili MSSQL-u.

SQLite
... The LIKE operator is not case sensitive and will match upper case characters on one side against lower case characters on the other. (A bug: SQLite only understands upper/lower case for 7-bit Latin characters. Hence the LIKE operator is case sensitive for 8-bit iso8859 characters or UTF-8 characters. For example, the expression 'a' LIKE 'A' is TRUE but 'æ' LIKE 'Æ' is FALSE...
[ Dejan Topalovic @ 09.12.2005. 10:57 ] @
Nisam nikad radio sa SQLlite-om, ali da mozda pokusas ovako:
"SELECT * FROM baza WHERE lower(f_decode(naziv)) LIKE '%"+lower(cTxt)+"%';"
[ majak @ 09.12.2005. 11:08 ] @
Citat:
StRiPy: Nisam nikad radio sa SQLlite-om, ali da mozda pokusas ovako:
"SELECT * FROM baza WHERE lower(f_decode(naziv)) LIKE '%"+lower(cTxt)+"%';"


f_decode() je moja korisnicka funkcija (UDF) pa nisam siguran da li je predlozeni nacin moguc.
Probacu.
[ majak @ 09.12.2005. 11:39 ] @
Nije moguce na navedeni nacin!
Kako bi resio problem na bazi sa kojom si radio?
[ Dejan Topalovic @ 09.12.2005. 12:24 ] @
Pa onako isto, samo bez f_decode.
[ majak @ 09.12.2005. 12:49 ] @
Ja te ocigledno ne razumem :(

Pretpostavimo da hocu da izdvojim sve slogove gde se pojavljuje rec 'rasejana'
(i Rasejana, RASEJANA ili RasEjana)

U bazi je rec 'rasejana' na primer u obliku 'Ÿ†OCŠ’††' a 'RasEjana' nesto sasvim
deseto jer funkcija za kodiranje ne radi po istom algoritmu za mala i velika slova
pa jos razlicito i ako naleti na parni ili neparni karakter.

Kako gornji hijeroglifi ne podrzavaju lower dakle preostaje da se kod prvo
desifruje pa tek onda uporedi sa zadatim stringom, ili nisam u pravu.

Dakle to me zanima.

Ili ja ne umem predstavim problem, ili ne vidim sta zelis da mi pokazes :(
POkusaj ponovo, molim te.

Pozdrav.
[ Dejan Topalovic @ 09.12.2005. 13:53 ] @
Ne znam da li SQLlite podrzava UDF, ali zar ne bi trebalo moci onako, kako sam vec napisao? Koju gresku ti javi kada koristis ovaj upit:
"SELECT * FROM baza WHERE lower(f_decode(naziv)) LIKE '%"+lower(cTxt)+"%';" ?
Sta javi upit: SELECT LOWER(f_decode(naziv)) FROM tabela;
[ _owl_ @ 09.12.2005. 20:56 ] @
Lepo ti je Stripy rekao, ako sifrujes (f_code()) te podatke valjda imas i funkciju koja ih desifruje u prvobitni oblik (f_decode()) . Posto ne mozes da radis LIKE sa sifrovanim vrednostima moras prvo da desifrujes sve slogove u tabeli i da onda radis pretragu sa nefirovanim vrednostima. Sve mi se cini (u nedostatku boljeg pasulja) da ti imas problem sa kodnim rasporedom teksta u bazi pa da zbog toga ne mozes da cuvas podatke u originalu.
[ majak @ 12.12.2005. 09:08 ] @
Citat:
StRiPy: Ne znam da li SQLlite podrzava UDF, ali zar ne bi trebalo moci onako, kako sam vec napisao? Koju gresku ti javi kada koristis ovaj upit:
"SELECT * FROM baza WHERE lower(f_decode(naziv)) LIKE '%"+lower(cTxt)+"%';" ?
Sta javi upit: SELECT LOWER(f_decode(naziv)) FROM tabela;


Evo tek sada (bio na putu)

"SELECT Naziv FROM tabela;" vraca 14000 slogova
"SELECT lower(Naziv) FROM tabela;" vraca 14000 slogova
"SELECT f_decode(Naziv) FROM tabela;" vraca 0 slogova
"SELECT lower(f_decode(Naziv)) FROM tabela;" vraca 0 slogova

Sada pretpostavljam da SQLite ne podrzava UDF i da u konkretnom slucaju
ne mogu naci elegantno resenje problema.

Hvala na pomoci i razumevanju.

[ Dejan Topalovic @ 12.12.2005. 09:58 ] @
SQLite podrzava user-defined funkcije. Evo kako se one kreiraju npr. u PHP-u:
http://www.php.net/sqlite_create_function

Kada USPJESNO kreiras UDF, probaj onda izvrsiti gorespomenute upite...
[ majak @ 14.12.2005. 07:57 ] @
Uf, nista ne gledam.
Hvala puno.

[Ovu poruku je menjao majak dana 14.12.2005. u 08:58 GMT+1]