[ mayana @ 23.12.2008. 07:39 ] @
dobar dan. dakle, kod pretrage baze gde u polju cena stoji npr. 23, 25, 27 kad zelim najpriblizniju cenu (u pretrazi koristim LIKE) i ukucam 20 ne nadje mi nista. kad sam probala da ukucam 2 nadje mi ova polja ako 2 stavim kao string '%2%'. pomoc? hvala
[ Fedya @ 23.12.2008. 08:44 ] @
LIKE nije 'priblizno', on sluzi za pretragu stringova po delovima. Znaci LIKE '2%' ce ti pronaci i 2 i 20 i 200 i 299 itd a ono sto si ti unela LIKE '%2%' ce ti naci na primer 5420, to jest - naci ce sve gde se dvojka nalazi u ceni.

Sto se tvog problema tice, prvo sto mi pada na pamet je da odredis dozvoljno otstupanje i da pretrazujes po tome. Na primer


SELECT cena FROM tabela WHERE cena BETWEEN (20, 30)

ili

SELECT cena FROM tabela WHERE cena BETWEEN (@pocetna - 10, @pocetna + 10)
[ mayana @ 23.12.2008. 09:07 ] @
da. sad trazim po netu i vidim da like radi samo sa stringom i datetime. palo mi je na pamet i to sto ti kazes... samo ja to moram da odradim u kodu, da musterija ne razmislja o unosu vrednosti. ovo drugo sto ti rece mi se cini prihvatljivo, hvala
[ .:Marvin:. @ 23.12.2008. 09:49 ] @
U principu, mozes da razvijes neku skalarnu f-ju koja trazi najblizu vrednost, pa tu onda smislis neki algoritam.

Samo obrati paznju, da kad su iznosi 20, 30, onih +-10 ti radi posao, a ako su iznosi milioni ili vise, onda ti treba +-milion, to mozes da resis nekim mod-om (modulo) ili tako nesto.
[ Fedya @ 23.12.2008. 10:04 ] @
Kao sto sam gore naveo, na njoj je da ordredi dozvoljeno otstupanje (to ce najverovatnije morati da racuna pre select-a).
Nisam mislio da hard-kodira 10.

Izvinjavam se ako nisam bio jasan.
[ DarkMan @ 24.12.2008. 14:38 ] @
Mozes i da sortiras po razlici cene u odnosu na trazenu i uzmes prvi rezultat sa najmanjom vrednoscu.

Code:

select top 1 CENA, ABS(20 - CENA) 
from Cenovnik
order by ABS(20-CENA)