In SQL Server was ist die einfachste/sauberste Möglichkeit, eine Datetime die erste des Monats basierend auf einer anderen Datetime zu machen? zB Ich habe eine Variable oder Spalte mit 3-Mar-2005 14.23 und ich möchte 1-Mar-2005 00:00 bis bekommen (als Datum, nicht als varchar)Einfachster Weg, um ein Datum zu erstellen, das der erste Tag des Monats ist, mit einem anderen Datum
Antwort
Select DateAdd(Month, DateDiff(Month, 0, GetDate()), 0)
auszuführen Ersetzen Sie in einer Spalte GetDate() durch Ihren Spaltennamen.
Der Trick zu diesem Code ist mit DateDiff. DateDiff gibt eine ganze Zahl zurück. Der zweite Parameter (die 0) stellt das 0-Datum in SQL Server dar, das 1. Januar 1900. So berechnet das datediff die Integer-Anzahl von Monaten seit dem 1. Januar 1900 und fügt dann diese Anzahl von Monaten zu 1. Januar 1900 hinzu. Der Nettoeffekt entfernt den Tag (und die Zeit) eines Datetime-Wertes.
SELECT DATEADD(mm, DATEDIFF(mm, 0, @date), 0)
So etwas wie dies funktionieren würde ....
UPDATE YOUR_TABLE
SET NewColumn = DATEADD(day, (DATEPART(day, OldColumn) -1)*-1, OldColumn)
Der Ausdruck könnte etwas einfacher sein: 'DATEADD (Tag, 1 - DAY (OldColumn), OldColumn)'. Die Methode DATEADD & DATEDIFF ist jedoch besser, weil sie auch den Zeitteil zurücksetzt. –
Verwenden Sie einfach
DATEADD(DAY, 1-DAY(@date), @date)
Dieser Code wird von genial gemacht. Es funktioniert auch für andere Zeiteinheiten. –