/ / Wie bekomme ich 00:00:00 in datetime für den ersten Monat? - SQL, SQL-Server, Datetime, SQL-Server-2008-r2

Wie bekomme ich 00:00:00 in datetime für den ersten Monat? - SQL, SQL-Server, Datetime, SQL-Server-2008-r2

Ich schrieb eine Anfrage, um den Ersten des Monats zu erhalten.

SELECT DATEADD(DAY, -(DATEPART(DAY,GETDATE())-1), GETDATE()) as First_Of_Month;

Ich bekomme zwar die entsprechende Ausgabe, aber mein Zeitstempel zeigt die aktuelle Uhrzeit an.

Hier "s was ich in der Abfrage mache, hoffe ich mache Sinn.

verwenden datepart Ich habe die Nr. berechnet. von Tagen (int) zwischen dem 1. und heute (27-1 = 26) Dann mit dateadd Funktion, ich habe "-datepart" hinzugefügt, um den ersten des Monats zu erhalten.

Dies ist nur eine Änderung des Datums. Worauf sollte ich achten oder lesen, um die Uhrzeit zu ändern. Ich gehe davon aus, dass es etwas mit 19000101 zu tun hat

Antworten:

5 für die Antwort № 1

Für SQL Server 2012 (danke drift und i-one)

DECLARE @now DATETIME = CURRENT_TIMESTAMP;

SELECT DATEADD(DAY, 1, EOMONTH(@now, -1));

-- or

SELECT DATEFROMPARTS(YEAR(@now), MONTH(@now), 1);

Für SQL Server 2008 und höher

DECLARE @now DATETIME = CURRENT_TIMESTAMP;

-- This shorthand works:

SELECT CONVERT(DATE, @now+1-DAY(@now));

-- But I prefer to be more explicit, instead of relying on
-- shorthand date math (which doesn"t work in all scenarios):

SELECT CONVERT(DATE, DATEADD(DAY, 1-DAY(@now), @now));

Für SQL Server 2005

SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()),0);

Ein Nachteil, wenn Sie diese SQL Server 2005-Methode verwenden: Sie müssen mit der Verwendung von Ausdrücken vorsichtig umgehen DATEDIFF in Abfragen. SQL Server kann die Argumente umsetzen und zu schrecklichen Schätzungen führen - wie hier zu sehen. Es ist tatsächlich sicherer, den etwas weniger effizienten String-Ansatz zu wählen:

SELECT CONVERT(DATETIME, CONVERT(CHAR(6), GETDATE(), 112) + "01");

1 für die Antwort № 2
SELECT convert(varchar(10),DATEADD(DAY, - (DATEPART(DAY,GETDATE())-1), GETDATE()),120)+" 00:00:00" as First_Of_Month;

1 für die Antwort № 3

Nur das Datum

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

Also für einen Monat ist es:

DATEADD(mm, DATEDIFF(mm, 0,  GETDATE()), 0) AS FirstDatetimeOfMonthmm,

1 für die Antwort № 4

Ich denke, der einfachste Weg ist, das Ergebnis bis heute zu bewerten:

SELECT cast(DATEADD(DAY, -(DATEPART(DAY,GETDATE())-1), GETDATE()) as date) as First_Of_Month

1 für die Antwort № 5

Eine alternative:

SELECT cast(
cast(datepart(yyyy, getdate()) as varchar)
+ "-"
+ cast(datepart(mm, getdate()) as varchar) + "-01 00:00:00"
as datetime)

Bauen Sie das Datum aus den Jahres- / Monatsbestandteilen auf und legen Sie am 1. und Mitternacht fest.


1 für die Antwort № 6
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) as First_Of_Month;