wake-up-neo.com

Wie bekomme ich ein Datum für den ersten Tag eines Monats?

Ich benötige Funktionen in einem Skript, mit denen ich Datumsangaben in eine Tabelle einfügen kann.

Welche SQL brauche ich, um ein Datum des Formats einzufügen

01/08/2010 00:00:00

wobei das Datum der erste Tag des aktuellen Monats ist. Was muss ich ändern, um den Monatswert angeben zu können? Vielen Dank

33
DaveDev

Der beste und einfachste Weg, dies zu tun, ist zu verwenden:

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

Ersetzen Sie einfach GETDATE () mit dem gewünschten Datum. 

76
Icemanind

Die akzeptierte Antwort funktioniert und ist möglicherweise schneller, aber SQL 2012 und höher haben eine einfachere Methode:

SELECT cast(format(GETDATE(), 'yyyy-MM-01') as Date)
8
jmoreno
select cast(cast(datepart(year,getdate()) as char(4)) 
+ '/' 
+ cast(datepart(month,getdate()) as char(2))
+ '/01' as datetime)
3
Joe Stefanelli

Hier ist eine sehr einfache Möglichkeit, dies zu tun (mit SQL 2012 oder höher).

datefromparts(year(getdate()),month(getdate()),1)

sie können auch einfach den letzten Tag des Monats verwenden 

eomonth(getdate())
2
iliketocode

SELECT DATEADD (Tag, 1-DATEpart (Tag, GETDATE ()), GETDATE ())

1
Beth
SELECT DATEADD(m, DATEDIFF(m, 0, GETDATE()), 0)

Das hat perfekt funktioniert. Ich habe tatsächlich eine Case-Anweisung hinzugefügt. Danke für den Beitrag:

SELECT Case(DATEADD(m, DATEDIFF(m, 0, GETDATE()), 0) as Date)
0
Todd181

ich denke normalerweise konvertiert String in MM/DD/YY HH: mm: ss

Entschuldigen Sie, dass Sie die Frage falsch verstanden haben, um zu sehen, ob Sie die Reihenfolge der Zeichenfolgen ändern können.

Dies kann sein, was Sie wollen:

declare @test as date

select @test = CONVERT(date, '01/08/2010 00:00:00', 103)
select convert(varchar(15), @test, 106)
0
BlackICE

Modifiziert von diesem link . Dies wird als Zeichenfolge zurückgegeben. Sie können jedoch nach Bedarf ändern, um Ihren Datetime-Datentyp zurückzugeben.

SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(GetDate())-1),GetDate()),101) 
0
AllenG
SELECT  CAST(FLOOR(CAST(DATEADD(d, 1 - DAY(GETDATE()), GETDATE()) AS FLOAT)) AS DATETIME)
0
Quassnoi