HAVIT Knowledge Base

Vývoj webových aplikací, .NET, SQL, návrh
Welcome to HAVIT Knowledge Base Sign in | Join | Help
-
Home Články Forums Obrázky Soubory

SQL

Microsoft SQL Server, Transact-SQL, Business Intelligence, CLR, ...

Jsou dvě data (small)datetime ze stejného dne?

Potíž je v tom, že typ (small)datetime obsahuje mimo údaje data i čas. Můžeme samozřejmě zařídit, aby naše záznamy měly tento čas 00:00, ale stejně na tento problém narazíme třeba při porovnávání s aktuálním datem u GETDATE(), které je včetně času.

Můžeme tedy buď porovnávat po složkách:

...
WHERE
   (YEAR(Datum) = YEAR(GETDATE()))
   AND (MONTH(Datum) = MONTH(GETDATE())
   AND (DAY(Datum) = DAY(GETDATE())

Nebo použít přetypování na číslo, které udává vzdálenost od určitého nultého dne a to ve dnech:

...
WHERE
   FLOOR(CONVERT(float, Datum)) = FLOOR(CONVERT(float, GETDATE())

Na běžných objemech dat se mi nepodařilo na SQL2005 naměřit žádný rozdíl v rychlosti, na obrovských objemech by to stálo za vyzkoušení, teoreticky by mohlo lépe vycházet to druhé.

Každopádně mi při běžném použití přijde přehlednější ta první varianta, ten druhý zápis by osobu neseznámenou mohl pěkně potrápit.

Published 19. května 2006 11:55 by Robert Haken
Filed under:

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

 

Bohous said:

Super, potreboval jsem uriznout hodiny a kombinace

cast (floor (float, datum) as datetime)

je presne ono ;-)

diky, b.

května 1, 2007 14:25
 

Bohous said:

Super, potreboval jsem uriznout hodiny a kombinace

cast (floor (convert (float, datum)) as datetime)

je presne ono ;-)

diky, b.

května 1, 2007 14:27

What do you think?

(required) 
(optional)
(required) 
Enter the code you see below

Submit