• 3 odgovora
  • 2.121 pregleda
Uspoređivanje podataka datetime tipa 18.01.2011. u 14:50 · pre 191 meseci #1
Pozdrav!

Zanima me da li neko može objasniti pojavu koju sam nedavno primjetio u SQL-u, a odnosi se na podatke tipa datetime i njihovo uspoređivanje.

primjer 1.

Code:
declare @d1 datetime
declare @d2 datetime

select    @d1 = '2010-01-01 00:00:00.002', @d2 = '2010-01-01 00:00:00.003'

if (@d1 = @d2)
select 'isto'
else
select 'nije isto'


Rezultat ovog upita je "isto"



primjer 2.

Code:
declare @d1 datetime
declare @d2 datetime

select    @d1 = '2010-01-01 00:00:00.004', @d2 = '2010-01-01 00:00:00.005'

if (@d1 = @d2)
select 'isto'
else
select 'nije isto'


rezultat je "nije isto"

Znači, kada se radi o razlici samo 1 milisekunde, nekada vraća da su podaci jednaki, a nekada da nisu jednaki. Slobodno probajte sa nekim drugim vrijednostima, bitno je samo da je razlika 1 milisekunda.
Re: Uspoređivanje podataka datetime tipa 18.01.2011. u 15:17 · pre 191 meseci #2
rezolucija datetime je 1/300 sekunde, zaokruzeno

dakle 0.000, 0.003, 0.007, 0.010, itd na osnovu 0.000, 0.00333333..., 0.0066666..., itd


kad parsira string, SQL zalepi na najblizu vrednost, pa je i 0.002 i 0.003 u stvarti isti datetime (.003) a 0.004 i 0.005 nije (jedan zalepi za 0.003 drugi za 0.007). Prosto ces to i sam videti sa select @d1, @d2
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Uspoređivanje podataka datetime tipa 19.01.2011. u 07:33 · pre 191 meseci #3
Hvala na odgovoru, sad stvari postaju jasnije zašto u SQL 2008 ima novi tip podatka datetime2 koji ima veću točnost.
Re: Uspoređivanje podataka datetime tipa 19.01.2011. u 08:06 · pre 191 meseci #4
Pa, iskreno po mom licnom misljenju, mislim da je datetime2 uveden zbog ISO8601, da bi pokrili sve moguce oblike (zato i mozes da odredis broj deciamalnih mesta iza sekunde). U principu, ako ne pravis aplikaciju koja je toliko oesltljiva na milisekude i nize uopste ti nije ni potreban, sto dokazuje i broj aplikacija koje sasvim lepo rade sa datetime i bez 7 decimalnih mesta iza sekunde. Veci opseg i preciznost znaci i veci storage, i za podatke i za indexe, i znaci sporije izvrsavanje svih komparativnih operacija nad tipom.
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme