Hoe kan ik de eerste dag van een maand in SQL selecteren?

Ik hoef alleen maar de eerste dag van de maand van een bepaalde DateTime-variabele te selecteren.

Ik weet dat het vrij eenvoudig is om dit soort code te gebruiken:

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

Maar helaas is dit niet erg elegant en ook niet erg snel.

Is er een betere manier om dit te doen? Ik gebruik SQL Server 2008.


Antwoord 1, autoriteit 100%

SELECT DATEADD(month, DATEDIFF(month, 0, @mydate), 0) AS StartOfMonth

Antwoord 2, autoriteit 22%

Naast al het bovenstaande antwoord, een manier die is gebaseerd op een functie die is geïntroduceerd in sql 2012

SELECT DATEFROMPARTS(YEAR(@mydate),MONTH(@mydate),1)

Antwoord 3, autoriteit 14%

Vanaf SQL Server 2012:

SELECT DATEADD(DAY,1,EOMONTH(@mydate,-1))

Antwoord 4, autoriteit 2%

Het casten van een string (d.w.z. “5/1/2009”) tot datetime is zeker beter leesbaar, maar we hebben een tijdje geleden code gevonden die de eerste van de maand zou terugkeren…

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

Antwoord 5, autoriteit 2%

Eenvoudige zoekopdracht:

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

Antwoord 6

Het is waarschijnlijk vrij snel. Waarom maak je het niet als een sql-functie.

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

Antwoord 7

SELECT @myDate - DAY(@myDate) + 1

Antwoord 8

Dit werkt ook:

    SELECT DATEADD(DAY,(DATEPART(DAY,@mydate)-1)*(-1),@mydate) AS FirstOfMonth

Antwoord 9

Eerste en laatste dag van de huidige maand:

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

Antwoord 10

Dit kan een nieuwe functie zijn, maar u kunt ook oude functies gebruiken:

select DATEFROMPARTS(year(@mydate),month(@mydate),'01')

Als de datum in de variabele bijvoorbeeld '2017-10-29' . was
het zou een datum teruggeven van '2017-10-01'

https://docs.microsoft.com/en-us/sql/t-sql/functions/datefromparts-transact-sql?view=sql-server-ver15


Antwoord 11

Gebruik dit a.u.b.

  1. Voor Server 2012

    DATEFROMPARTS(year('2015-06-30'),month('2015-06-30'),1)
    
  2. Vóór Server 2012

    select  cast(cast(year('2015-06-30') as varchar(4))+'-'+ cast(month('2015-06-30') as varchar(2))+'-01' as smalldatetime)
    

Antwoord 12

DECLARE @startofmonth date
SET @startofmonth = DATEADD(dd,1,EOMONTH(Getdate(),-2))

Met -2 krijgt u de eerste dag van vorige maand. dat wil zeggen, getdate() is 15-10-18. Je resultaten zouden 1-9-18 zijn. Verander naar -1 en je resultaten zouden 1-10-18 zijn. 0 zou het begin van volgende maand zijn, 1-11-2018.. etc etc.

of

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

Antwoord 13

----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

Antwoord 14

Toekomstige googlers, probeer dit op MySQL:

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

Antwoord 15

Ik heb GETDATE() gebruikt als een datum om mee te werken, je kunt het vervangen door de datum die je nodig hebt.
Dit is hoe dit werkt: Eerst formatteren we de datum in JJJJMMDD… formaat afkappen om alleen de 6 meest linkse karakters te behouden om alleen het JJJJMM gedeelte te behouden, en dan ’01’ toevoegen als de maand – en voila! je hebt de eerste dag van de huidige maand.

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

BTW, de prestaties zijn hier geweldig!


Antwoord 16

Als je hier vandaag naar kijkt en SQL server 2012 of nieuwer gebruikt, heb je de EOMONTH-functie die de zaken eenvoudiger maakt:

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

Je kunt GETDATE() wijzigen met elke gewenste datumvariabele.


Antwoord 17

Hier kunnen we onderstaande zoekopdracht gebruiken voor de eerste datum van de maand en de laatste datum van de maand.

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

Antwoord 18

Als u SQL Server 2012 of hoger gebruikt;

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

Antwoord 19

Probeer de volgende zoekopdracht uit te voeren:

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


Antwoord 20

selecteer CONVERTEREN(datum,DATEADD(dd,-(DATEPART(dd,getdate())-1),getdate()),120)

Deze functie geeft u een datumdeel van de startdatum van de maand


Antwoord 21

SELECT DATEADD (DAY, -1 * (DAY(GETDATE()) - 1), GETDATE())

…………………………………………………………. ………………

Als je de tijd niet wilt, converteer het dan naar DATE of als je de tijd wilt maken naar 0:00:00, converteer dan naar DATE en dan terug naar DATETIME.

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

Verander GETDATE() in de gewenste datum


Antwoord 22

Ik heb persoonlijk aanbevolen de onderstaande sql te gebruiken, want als ik de datumfunctie in de voorwaardeclausule probeer te gebruiken, vertraagt ​​het mijn vraagsnelheid erg.

probeer dit in ieder geval gerust.

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

Antwoord 23

Niet om te concurreren met een van de grote geesten hier, maar een simpele suggestie die net iets anders is dan het geaccepteerde antwoord hierboven.

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

Antwoord 24

Ik gebruik graag FORMAT, je kunt zelfs een tijd specificeren

SELECT FORMAT(@myDate,'yyyy-MM-01 06:00') first_of_a_month

Antwoord 25

In SQL Server 2012

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

Antwoord 26

Deze query zou heel goed moeten werken op MySQL:

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

Antwoord 27

Voor iedereen die nog steeds op zoek is naar een antwoord, dit werkt als een tierelier en elimineert alle datumtoevoegingen. Het tijdstempel is optioneel, voor het geval het gespecificeerd moet worden, maar werkt ook zonder.

SELECT left(convert(varchar, getdate(),23),7)+'-01 00:00:00'

Antwoord 28

Eerste datum en laatste datum ophalen in de datum die we doorgeven als parameter in SQL

     @date DATETIME
    SELECT @date = GETDATE()
    SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(@date)-1),@date),105) AS value,
    'First Day of Current Month' AS name
    UNION
    SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,@date))),
    DATEADD(mm,1,@date)),105),
    'Last Day of Current Month'
    GO
      **OutPut**
12/01/2019  First Day of Current Month
12/31/2019  Last Day of Current Month

Antwoord 29

Hoe zit het met iets anders! Gebruik Formaat.

DECLARE @Date Date =GetDate();
SELECT CONVERT(Date,Format(@Date,'yyyyMM01'));

We kunnen de conversie verwijderen als we casten naar Datumkolom of variabele

DECLARE @Date Date =GetDate();
SELECT @Date =Format(@Date,'yyyyMM01');
SELECT [Date]=@Date

Veel plezier 🙂


Antwoord 30

Probeer het volgende:

select trunc(sysdate,'MM') 
from dual;

LEAVE A REPLY

Please enter your comment!
Please enter your name here

seven − two =

Other episodes