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
quelle
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
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.
DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
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.
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).
quelle