So erhalten Sie das aktuelle Datum ohne den Zeitteil

83

Wie erhalte ich in SQL Server 2005 das aktuelle Datum ohne den Zeitteil? Ich habe verwendet GETDATE(), möchte aber, dass es eine Zeit von 00: 00: 00.0 hat

Piers Myers
quelle

Antworten:

119

Am schnellsten, wenn Sie über ein Recordset iterieren müssen und in SQL Server 2008 kein Datum haben

SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)

Zwei unterschiedliche und hervorragende Antworten auf StackOverflow belegen dies: Eins , Zwei

Varchar-Konvertierungen sind eine der schlechtesten Möglichkeiten. Natürlich spielt es für einen Wert keine Rolle, aber es ist eine gute Angewohnheit, sich darauf einzulassen.

Dieser Weg ist auch deterministisch, wenn Sie beispielsweise eine berechnete Spalte indizieren möchten. Sogar Leute, die Bücher über SQL Server schreiben , werden von Datetime-Konvertierungen überrascht

Diese Technik ist auch erweiterbar.

  • gestern: DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
  • Monatsanfang: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
  • Ende letzten Monats: DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
  • Anfang nächsten Monats: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)

Bearbeiten:

Wie ich bereits zum Determinismus erwähnt habe, sind varchar-Methoden nur dann sicher, wenn Sie den Stil 112 verwenden.

Andere Antworten hier weisen darauf hin, dass Sie dies niemals auf eine Spalte anwenden würden. Dies ist korrekt, aber möglicherweise möchten Sie 100.000 Zeilen auswählen oder eine berechnete Spalte oder nur GROUP BY-Datum hinzufügen. Dann müssen Sie diese Methode anwenden.

Die andere Antwort erwähnt auch den Stil 110. Dies ist keine sichere Sprache oder SET DATEFORMAT und schlägt mit der Spracheinstellung "britisch" fehl. Siehe die ultimative Anleitung zu den datetime-Datentypen von Tibor Karaszi.

gbn
quelle
1
Der angegebene Link ist nicht mehr verfügbar.
Viswanathan Iyer
6

Sie müssen es in varchar konvertieren, indem Sie ein Formatmuster angeben (in diesem Fall 110) und es dann in datetime zurückkonvertieren (oder zurückkonvertieren).

select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)
mrdenny
quelle