2013-03-19 6 views
7

Wenn ich Datum und Uhrzeit speichern möchte, ist es besser, sie in einem separaten Datum und einer separaten Uhrzeit zu speichern oder eine einzige Datetime zu verwenden?Wenn Sie ein Datum und eine Uhrzeit anstelle eines einzelnen Datums verwenden möchten

Wann sollten wir Datum und Uhrzeit anstelle einer einzelnen Datetime verwenden?

Ich möchte meine Abfragen entweder mit Datum oder Uhrzeit filtern.

+1

Hängt davon ab, wofür Sie es wirklich brauchen. Es gibt keinen guten Grund, nur einen standardmäßig zu verwenden. – CathalMF

Antwort

5

In SQL Server 2008 haben Sie date and time data types, so dass dies kein Problem wird.

Wenn es eine gute Wahl ist, hängt es wirklich von Ihrem Unternehmen ab und wie Sie Ihre Daten abfragen werden.

Wenn zum Beispiel möchten, dass Sie alle Aufträge Orte zwischen 1 und 2.00 Uhr für jeden Tag bei uns auch getrennt Date und Time Spalte wird es schneller

+0

Es ist ein interessanter Punkt, wenn die Abfragen nur für Zeitintervalle schneller sind. Haben Sie irgendwelche Daten, um dies zu begründen, oder basiert dies auf einer Annahme Index-Strukturen? –

+1

Abfragen der Daten mit einer DATETIME-Spaltenfilterung nur nach Zeit, wäre es komplizierter, da es einen Scan erforderlich wäre –

+0

Ja, ich möchte meine Daten mit dem Datum für eine beliebige Zeit oder die Zeit für ein beliebiges Datum abfragen. – Harke

1

Aus technischer Sicht hat ein Datum immer eine Uhrzeit und eine Uhrzeit immer ein Datum. Wenn Sie eine Zeit in der Datenbank speichern, hat sie ein Standarddatum, das auf sie angewendet wird. Wenn Sie nur ein Datum speichern, ist die Uhrzeit an diesem Datum um Mitternacht (00:00:00).

Meiner Meinung nach ist es immer die beste Vorgehensweise, beide zusammen zu speichern, da Funktionen dann auf ein einzelnes Feld angewendet werden können, je nachdem, ob Sie Vergleiche am Datum oder an der Uhrzeit vornehmen müssen.

+2

eh - nein. Es hängt davon ab, was der Kontext ist. Zum Beispiel haben die Geschäftszeiten eines Restaurants Zeitkomponenten ohne festen Datumskontext, und der Valentinstag findet am 14. Februar ohne besondere Zeit statt. –

+0

Ich werde meinen Beitrag aktualisieren. Ich meinte auf einer technischen Ebene, obwohl ich hoffte, dass das durch die Großschreibung, die auf den Wörtern Datum und Zeit verwendet wird, offensichtlich wäre. – aaroncatlin

8

Wenn Sie einen Moment Zeit reden machen, ob ein universellen Moment, oder ein bestimmtes Datum und Uhrzeit in einem lokalen Kalender, verwenden Sie eine datetime. Wenn Sie sicher sein wollen, dass Sie unabhängig vom Beobachter über einen genauen Zeitpunkt sprechen, verwenden Sie eine datetimeoffset.

Wenn Sie nur eine date speichern, dann meinen Sie ein Datum ohne eine Zeitkomponente, was "jederzeit an diesem Datum" bedeutet.

Wenn Sie nur eine time speichern, dann meinen Sie eine Zeit ohne eine Datumskomponente, was "dieses Mal an jedem Datum" bedeutet, oder "dieses Mal an einem Datum, das auf andere Weise bestimmt wird".

Es gibt keine praktische Möglichkeit, sowohl date als auch time, die in etwa der gleichen Sache sind, sitzen in der gleichen Zeile. Verwenden Sie dazu einfach eine datetime.

1

Nichts brillant über Datum und Zeit zu trennen,

Besser Sie sparen Datum und Zeit in derselben Spalte,

Hier werden sie das gleiche Problem besprochen haben sie überprüfen: are-there-any-good-reasons-for-keeping-date-and-time-in-separate-columns

Sie können auch Datum erhalten und Zeit getrennt durch Abfrage

SELECT 
    CONVERT(VARCHAR(10),GETDATE(),111) as DatePart, 
    convert(varchar(15), getdate(), 108) TimePart 
+0

Tatsächlich gibt es einige sehr gute Gründe, sie aufzuteilen. Verwenden Sie beispielsweise den Date-Datentyp, wenn Sie sich nicht um die Zeit kümmern. Sagen Sie dateofbirth .. auf diese Weise sind Ihre Altersberechnungen viel einfacher. Der Zeitdatentyp eignet sich hervorragend für Schichtberechnungen. Ich will alle, die um 17 Uhr arbeiten, unabhängig vom Datum. Sie können sie wie Sie aufteilen, aber dann sind sie varchar und bestimmte Berechnungen werden viel schwieriger. Was ist größer "01: 00: 00 PM" oder "12: 30: 00 AM"? –

2

Wenn Sie sich absichtlich nicht um die Zeit kümmern, ist es effizienter, th zu speichern ist Daten als Datumsdatentyp. Denken Sie an eine Geburtstagskolumne für Kunden, es gibt nicht viele Fälle, an die ich denken könnte, die diese Zeit nutzen würden. Wenn eine Zeit damit verbunden ist (oft ein Bug), muss dies über eine Convert-Anweisung entfernt werden, um einen Vergleich durchzuführen. Wenn Sie diese Werte nicht benötigen, wird zusätzlicher Speicherplatz belegt (3 Byte im Vergleich zu 8).

Ich denke, es ist ähnlich wie eine Status-Code-Tabelle mit der ID als Bigint anstelle von einem Tinyint oder dergleichen (abhängig davon, wie viele Statuscodes Sie haben möchten).

Es ist nur eine Frage dessen, wofür Sie die Daten verwenden, wenn Sie der Meinung sind, dass Sie die Daten wahrscheinlich brauchen, dann verwenden Sie datetime, andernfalls verwenden Sie date.

Verwandte Themen