2012-04-13 4 views

Antwort

6

Datetime dauert 8 Bytes pro Wert

Datum 3 Byte.

Ich kann nicht für niedrige Leistung sprechen; Im Allgemeinen haben wir es jedoch als Fehler empfunden, Werte standardmäßig als DateTime zu speichern. Früher oder später stößt man auf das UTC-Problem und muss Offsets für Datumsangaben mit 00: 00: 00.000 im Zeitabschnitt erstellen!

Wenn Sie nur Daten speichern, würde ich den Datentypen Date beibehalten; Sie passen mehr Zeilen pro Seite an und sparen sich viel Ärger

+0

Dies ist ein Es hängt auch davon ab, was der Kontext von "Datum" ist und ob es TZ-bewusst sein muss (mein Freitag ist vielleicht nicht Ihr Freitag). Nicht das Speichern von allem als UTC ist viel besser ... da es immer noch nicht das TZ selbst erfasst. Es gibt auch einen 'DATETIMEOFFSET' Typ; Allerdings weiß ich nicht, wie es zu .NET zugeordnet ist :( –

+0

@ Click-Rex können Sie bitte Ihren Kontext erklären? – Pankaj

+0

DateTime ist nur "lokale Zeit" - es hat keine Ahnung von Zeitzone Präsentation. Es bedeutet, dass Sie wissen müssen In welcher Zeitzone es geschrieben wurde, damit Sie es genau entschlüsseln können. Auch dort gibt es eine ganze Reihe von Problemen wie die Sommerzeit. Hier kommt der Kommentar zu UTC ins Spiel - alle Apps würden Daten in UTC für die Speicherung und zurück zu Lokale Zeit für die Anzeige Klingt einfach? Nicht wirklich - es ist wirklich ziemlich schwierig, alle Apps ohne viel absichtlichen Aufwand und Tests zu bekommen. DateTimeOffset Typ wurde eingeführt, um das Problem zu beheben. – stephbu

1

Hängt davon ab, wie viele Zeilen Sie speichern und wofür Sie sie verwenden. Datum ist 3 Bytes, DateTime ist 8 Bytes. Kann sich schnell addieren, wenn Sie Milliarden von Datenzeilen haben oder für einen Index verwenden. Natürlich gibt es einen Unterschied in der Auflösung des gespeicherten Wertes. Es gibt auch andere Datumstypen zwischen Datum und Datum, z. B. smalldatetime, die kompakter sind, wiederum mit unterschiedlichen Kompromissen.

SQL Date/Time Types Documentation

1

Überlegungen:

  • Leistung: weniger Bits für Datum-Typ bedeutet mehr Zeilen pro Seite SQL (Datenseite oder Indexseite) bedeutet weniger Seiten gelesen werden, während der Ausführung Abfrage
  • Kompatibilität: DATE Typ wurde in SQL Server 2008 eingeführt, so dass Ihre Anwendung ist nicht kompatibel mit SQL Server 2005 nicht mehr
  • .NET: keine Date Klasse in .NET - DATE wird umgewandelt in DateTime .NET-Klassen
  • LINQ: LINQ2SQL (und SQL Metallwerkzeug) geht gut mit DATE SQL-Typ
  • Sie Stunden und Minuten von DATETIME zuschneiden können tun CAST(@myDateTimeParam AS DATE)

aus meiner Erfahrung: Ich mag diese neue Art und hatte keine Probleme mit ihm während der Programmierung T-SQL oder C#

sich dessen bewusst sein (Mischdatentypen für dat e auf comparition):

DECLARE @startDay DATE = '2012-04-11' -- day 
DECLARE @endDay DATE = '2012-04-13' -- day 
DECLARE @eventTime DATETIME = '2012-04-13 12:00' -- point in time (noon) 

IF @eventTime BETWEEN @startDay AND @endDay PRINT 'In period.' ELSE PRINT 'Not in period!' 

Ergebnis ist:

Not in period! 

Auf BETWEEN comparition @endDay wurde in der Zeit (Punkt zu DATETIME gegossen unten; der gemeinsame Typ mit @eventTime), denke ich - was gibt ein nicht intuitives Ergebnis.

Vergleichen mit:

DECLARE @startDay DATE = '2012-04-11' -- day 
DECLARE @endDay DATE = '2012-04-13' -- day 
DECLARE @eventTime DATE = '2012-04-13' -- day 

IF @eventTime BETWEEN @startDay AND @endDay PRINT 'In period.' ELSE PRINT 'Not in period!' 

Ergebnis:

In period. 

Und mit ihm:

DECLARE @startDay DATETIME = '2012-04-11' -- day, but point in time in fact 00:00.000 
DECLARE @endDay DATETIME = '2012-04-13' -- day, but point in time in fact 00:00.000 
DECLARE @eventTime DATETIME = '2012-04-13' -- day, but point in time in fact 00:00.000 

IF @eventTime BETWEEN @startDay AND @endDay PRINT 'In period.' ELSE PRINT 'Not in period!' 

Ergebnis:

In period. 
Verwandte Themen