source

SQL에서 월의 첫 번째 날을 선택하려면 어떻게 해야 합니까?

itover 2023. 4. 7. 21:13
반응형

SQL에서 월의 첫 번째 날을 선택하려면 어떻게 해야 합니까?

특정 Date Time 변수의 첫 번째 날짜를 선택하려면 어떻게 해야 합니까?


이러한 종류의 코드를 사용하는 것은 매우 간단합니다.

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

이것은 매우 우아하지도 않고, 매우 빠르지도 않다.

더 좋은 방법이 있을까요?

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

위의 모든 답변과 더불어 에 소개된 기능을 기반으로 한 방법sql 2012

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

SQL Server 2012 이후:

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

심플 쿼리:

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

날짜로 문자열(예: "5/1/2009")을 주조하는 것이 확실히 읽기 쉽지만, 얼마 전에 월 초를 반환하는 코드를 발견했습니다.

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

이것은 새로운 기능일 수도 있지만 오래된 기능을 사용할 수도 있습니다.

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

변수의 날짜가 예를 들어'2017-10-29'그것은 날짜를 돌려줄 것이다.'2017-10-01'

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

SELECT @myDate - DAY(@myDate) + 1

SQL Server 2012+로 하고 싶은 경우는, 내가 사용한 솔루션을 사용해 주세요.

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

SQL Server 2022부터는

SELECT DATETRUNC(month, @mydate)

이 필요 때문에

꽤 빠를 거예요.SQL 함수로 생성하면 어떨까요?

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

이 달의 첫 번째 및 마지막 날:

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

이것도 동작합니다.

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

이것을 사용해 주세요

  1. Server 2012의 경우

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

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

GETDATE()를 작업 날짜로 사용했으므로 원하는 날짜로 대체할 수 있습니다.
동작은 다음과 같습니다.먼저 YYYMMDD로 날짜를 포맷하고 YYYMM 부분만 유지하기 위해 가장 왼쪽 6자만 잘라낸 후 01을 월과 voila로 추가합니다!이 달의 첫 번째 날이 있습니다.

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

그나저나 퍼포먼스 대박이다!

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

-2는 지난달의 첫날을 알려드릴 겁니다즉, getdate()는 10/15/18 입니다.결과는 9/1/18이 됩니다.-1로 변경하면 결과는 10/1/18이 됩니다. 0은 다음 달인 2018년 11월 1일 시작입니다.기타 등등.

또는

DECLARE @startofmonth date
SET @startofmonth = DATEADD(dd,1,EOMONTH(@mydate,-1))
SELECT DATEADD (DAY, -1 * (DAY(GETDATE()) - 1), GETDATE())

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

시간을 원하지 않는 경우 DATE로 변환하거나 0:00:00로 변환한 후 DATETIME으로 다시 변환합니다.

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

GETDATE()를 원하는 날짜로 변경합니다.

현재 SQL Server 2012 이후를 사용하고 있다면 EOMONTH 기능을 통해 작업을 보다 쉽게 수행할 수 있습니다.

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

원하는 날짜 변수를 사용하여 GETDATE()를 변경할 수 있습니다.

여기서는 해당 달의 첫 번째 날짜와 마지막 날짜까지 아래 쿼리를 사용할 수 있습니다.

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

SQL Server 2012 이상을 사용하는 경우

SELECT DATEADD(MONTH, -1, DATEADD(DAY, 1, EOMONTH(GETDATE())))
----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

다음 쿼리를 실행해 보십시오.

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

이 쿼리는 MySQL에서 매우 잘 작동합니다.

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

MySQL에서 향후 구글을 이용하실 수 있습니다.

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

CONVERT(날짜, DATEADD(dd,-(DATEPART(dd, getdate())-1, getdate(), 120)를 선택합니다.

이 함수는 해당 달의 시작 날짜의 일부 날짜를 제공합니다.

뭔가 다른 게 어때!형식을 사용합니다.

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

날짜 열 또는 변수에 캐스팅하는 경우 변환을 제거할 수 있습니다.

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

즐거운 시간 보내세요:)

condition 절에서 date 함수를 사용하려고 하면 쿼리 속도가 매우 느려지기 때문에 개인적으로 아래의 sql을 추천했습니다.

아무튼 마음껏 드셔보세요.

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

여기 있는 어떤 위대한 지성들과도 경쟁하기 위해서가 아니라, 위에서 받아들여진 답변과는 약간 다른 단순한 제안입니다.

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

사용하는 것을 좋아합니다.FORMAT할 수

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

SQL Server 2012에서는

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

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

아직 답을 찾고 있는 사람에게 이것은 매력적으로 작용하며 어떤 대추 광고도 없애준다.타임스탬프는 지정이 필요한 경우 옵션이지만 필요 없이 작동합니다.

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

언급URL : https://stackoverflow.com/questions/1520789/how-can-i-select-the-first-day-of-a-month-in-sql

반응형