it-swarm.com.de

Wie kann ich den ersten Tag eines Monats in SQL auswählen?

Ich muss nur den ersten Tag des Monats einer bestimmten Datums-/Zeitvariablen auswählen.

Ich weiß, dass es ziemlich einfach ist, diese Art von Code zu verwenden:

select CAST(CAST(YEAR(@mydate) AS VARCHAR(4)) 
+ '/' + CAST(MONTH(@mydate) AS VARCHAR(2)) + '/01' AS DATETIME)

Dies ist jedoch nicht sehr elegant und wahrscheinlich auch nicht sehr schnell.

Gibt es einen besseren Weg, dies zu tun? Ich verwende SQL Server 2008.

241
Brann
SELECT DATEADD(month, DATEDIFF(month, 0, @mydate), 0) AS StartOfMonth
495
LukeH

Ein Weg, der auf einer der in sql 2012 eingeführten Funktionen basiert

SELECT DATEFROMPARTS(YEAR(@mydate),MONTH(@mydate),1)
102
Jithin Shaji

SQL Server 2008:

SELECT DATEADD(DAY,1,EOMONTH(@mydate,-1))
27
Marcos Krucken

Das Casting eines Strings (d. H. "01.05.2009") in datetime ist sicherlich lesbarer, aber wir fanden Code vor einiger Zeit, der den ersten des Monats zurückgeben würde ...

DECLARE @Date DATETIME
//...
SELECT DATEADD(mm, DATEDIFF(mm,0,@Date), 0)
12
Mayo

Einfache Abfrage:

SELECT DATEADD(m, DATEDIFF(m, 0, GETDATE()), 0) 
-- Instead of GetDate you can put any date.
7
Abhishek Gupta

Es ist wahrscheinlich ziemlich schnell. Warum nicht als SQL-Funktion erstellen?.

CREATE FUNCTION [dbo].[GetFirstDayOfMonth] ( @InputDate    DATETIME )
RETURNS DATETIME
BEGIN

    RETURN CAST(CAST(YEAR(@InputDate) AS VARCHAR(4)) + '/' + 
                CAST(MONTH(@InputDate) AS VARCHAR(2)) + '/01' AS DATETIME)

END
GO
5
dove

Das funktioniert auch:

    SELECT DATEADD(DAY,(DATEPART(DAY,@mydate)-1)*(-1),@mydate) AS FirstOfMonth
4
Alan Burstein
SELECT @myDate - DAY(@myDate) + 1
2
PoloSoares

Bitte benutzen Sie diese

  1. Für Server 2012

    DATEFROMPARTS(year('2015-06-30'),month('2015-06-30'),1)
    
  2. Vor dem Server 2012

    select  cast(cast(year('2015-06-30') as varchar(4))+'-'+ cast(month('2015-06-30') as varchar(2))+'-01' as smalldatetime)
    
2
adnan umar
----Last Day of Previous Month
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
LastDay_PreviousMonth
----Last Day of Current Month
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
LastDay_CurrentMonth
----Last Day of Next Month
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+2,0))
LastDay_NextMonth
2
kaub0st3r
DECLARE @startofmonth date
SET @startofmonth = DATEADD(dd,1,EOMONTH(Getdate(),-2))

Mit der -2 erhalten Sie den ersten Tag des letzten Monats. getdate () ist also 15.10.18. Ihre Ergebnisse wären der 01.09.18. Wechseln Sie zu -1 und Ihre Ergebnisse wären 10/1/18. 0 wäre der Beginn des nächsten Monats, 1.11.18 ... usw. usw.

oder

DECLARE @startofmonth date
SET @startofmonth = DATEADD(dd,1,EOMONTH(@mydate,-1))
1
Brian Widdoes

Zukünftige Googler auf MySQL versuchen dies:

select date_sub(ref_date, interval day(ref_date)-1 day) as day1;
1
Ariel T

Wenn Sie sich das heute anschauen und SQL Server 2012 oder neuer verwenden, haben Sie die EOMONTH-Funktion, die die Dinge vereinfacht:

SELECT DATEADD(day, 1, EOMONTH(DATEADD(month, -1, GETDATE()))) as firstdateofmonth

Sie können GETDATE () mit der gewünschten Datumsvariablen ändern.

1
Ang Li

Bei Verwendung von SQL Server 2012 oder höher;

SELECT DATEADD(MONTH, -1, DATEADD(DAY, 1, EOMONTH(GETDATE())))
1
Lankymart

Führen Sie die folgende Abfrage aus:

SELECT DATE_ADD(DATE_ADD(LAST_DAY(CURRENT_DATE-INTERVAL 1 DAY),INTERVAL 1 DAY),INTERVAL -1 MONTH)

1
divya

Hier können wir die unten stehende Abfrage zum ersten Datum des Monats und zum letzten Datum des Monats verwenden.

SELECT DATEADD(DAY,1,EOMONTH(Getdate(),-1)) as 'FD',Cast(Getdate()-1 as Date)
as 'LD'
1
Pradeep Thakur

Ich persönlich empfahl, dass das SQL unten, weil, wenn ich versuche, Datumsfunktion in der Bedingungsklausel zu verwenden, meine Abfragegeschwindigkeit sehr verlangsamt.

sie können es trotzdem versuchen.

select CONCAT(DATEPART(YYYY,@mydate),'-',DATEPART(MM,@mydate),'-01')
0
Jelly

Ich habe GETDATE () als Datum verwendet, um damit zu arbeiten. Sie können es durch das Datum ersetzen, das Sie benötigen. 
So funktioniert das: Zuerst formatieren wir das Datum im Format JJJJJMMTT ... und werden abgeschnitten, um nur die 6 Zeichen ganz links zu behalten, um nur den Teil JJJJJMM beizubehalten, und fügen Sie als Monat "01" - und voila! Sie haben den ersten Tag des aktuellen Monats.

SELECT CAST(CONVERT(VARCHAR(6),GETDATE(),112) +'01' AS DATETIME) AS StartOfMonth

Übrigens, die Leistung ist großartig!

0
Eli

wählen Sie CONVERT (Datum, DATEADD (TT, - (DATEPART (dd, getdate ()) - 1), getdate ()), 120

Diese Funktion liefert Ihnen einen Teil des Startdatums des Monats

0
Tushar

In SQL Server 2012

 select getdate()-DATEPART(day, getdate())+1

 select DATEADD(Month,1,getdate())-DATEPART(day, getdate())
0
BornToCode

Diese Abfrage sollte unter MySQL sehr gut funktionieren:

SELECT concat(left(curdate(),7),'-01') 
0
user11869348

Um mit keinem der großen Geister hier zu konkurrieren, sondern mit einem einfachen Vorschlag, der etwas anders ist als in der oben akzeptierten Antwort.

select dateadd(day, -(datepart(day,@date)+1,@date)
0
wayner

Erster und letzter Tag des aktuellen Monats:

select dateadd(mm, -1,dateadd(dd, +1, eomonth(getdate()))) as FirstDay, 
eomonth(getdate()) as LastDay
0

Ich benutze gerne FORMAT, Sie können sogar eine Zeit angeben

SELECT FORMAT(@myDate,'yyyy-MM-01 06:00') first_of_a_month
0
michal
SELECT DATEADD (DAY, -1 * (DAY(GETDATE()) - 1), GETDATE())

.................................................. ...................

Wenn Sie die Zeit nicht wünschen, dann konvertieren Sie sie in DATE oder wenn Sie die Uhrzeit auf 0:00:00 setzen möchten, Konvertieren Sie in DATE und dann wieder in DATETIME.

SELECT CONVERT (DATETIME,  
CONVERT (DATE, DATEADD (DAY, -1 * (DAY(GETDATE()) - 1),
GETDATE())))

Ändern Sie GETDATE () auf das gewünschte Datum

0
Sayka