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

Antwort

Die schnellste , 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 bestätigen dies: Eins , Zwei

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

Diese Methode ist auch deterministisch Sagen Sie, wenn Sie eine berechnete Spalte indizieren möchten. Sogar Leute, die Bücher über SQL Server schreiben, werden mit Datums- / Uhrzeitkonvertierungen erwischt

Diese Technik ist auch erweiterbar.

  • gestern: DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
  • Monatsanfang: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
  • Ende des letzten Monat: 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 Stil 112 verwenden.

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

In der anderen Antwort wird auch Stil 110 erwähnt. Dies ist keine Sprache oder SET DATEFORMAT ist sicher und schlägt mit der Einstellung „Britisch“ fehl. Siehe die ultimative Anleitung zu den Datetime-Datentypen von Tibor Karaszi.

Kommentare

  • Bereitgestellt lin k ist tot.

Antwort

Sie müssen es in varchar konvertieren, indem Sie ein Formatmuster angeben (110 in diesem case) dann konvertieren (oder umwandeln) zurück in datetime.

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.