2008-09-17 9 views
3

Szenario: Eine gespeicherte Prozedur empfängt vom Code eine DateTime mit einem DateTime.Now-Wert als Datetime-Parameter. Die gespeicherte Prozedur muss nur den Datumsteil der Datetime in der Zeile speichern, aber alle datumsbezogenen Arithmetikdaten beibehalten, um z. B. Suchen über Zeitintervalle durchzuführen und Berichte basierend auf Datumsangaben auszuführen.Beste Art nur Datum auf Datetime Feld speichern?

Ich weiß, dass es mehrere Wege gibt, aber was ist besser, wenn man Leistung und verschwendeten Platz im Auge hat?

+0

Können Sie uns bitte mitteilen, welche Datenbank Sie verwenden? – Brettski

+0

Es tut uns leid, es ist SQL Server 2005, das Tag ist Tsql, dachte, dass wäre genug> _ < –

Antwort

4

Geschäftslogik sollte außerhalb des Proc behandelt werden. Die Procs-Jobs sollten die Daten speichern, die an sie übergeben werden. Wenn das Requirment nur Date und nicht Time speichern soll, sollte die BL/DL DateTime.Now **. Date ** (oder die Äquivalenz ... im Grunde den Date-Teil Ihres DateTime-Objekts) übergeben.

Wenn Sie den Code nicht aus irgendeinem Grund steuern kann, gibt es immer konvertieren (varchar (10), @YOURDATETIME, 101)

+0

Ich kann weiter kommentieren, dass es an meinem Produktionscode funktioniert hat. In VbNet konnte ich alle Setter mit dem DateTime-Typ modifizieren, um nur das Datum zu erhalten, indem ich "_variable = value.Date" sagte, und von da an wurde es zur Datenbank hin und her übertragen. Vielen Dank! –

0

speichern das Datum mit Uhrzeit = Mitternacht

EDIT: Ich war der Annahme, MS SQL Server

+0

Es ist, es ist tsql markiert. Danke für die Antwort. –

0

Im Wesentlichen sind Sie nur gehen Sie das Datum Teil des Datetime-Objekt zu speichern. Dies bedeutet, dass unabhängig davon, wie Sie mit der Abfrage der Daten umgehen möchten, das zurückgegebene Datum immer auf 00:00:00 gesetzt wird.

Zeitbezogene Funktionen sind in diesem Szenario nutzlos (auch wenn das ursprüngliche DateTime-Objekt sie verwendet), da Ihre Datenbank diese Informationen löscht.

Datumsbezogene Arithmetik wird weiterhin angewendet, obwohl Sie für jedes aus der Datenbank zurückgegebene Datum eine Zeit von Mitternacht annehmen müssen.

0

Wenn Sie auf Oracle arbeiten, verwenden Sie innerhalb Ihrer gespeicherten Prozedur die TRUNC Funktion auf der Datumzeit. Dies gibt NUR den Datumsteil zurück.

Verwandte Themen