SQL에서 해당 달의 마지막 날 가져오기
저는 월말을 SQL 날짜로 받아야 합니다.이달의 첫 번째 날이 있다면 다음과 같은 일을 할 수 있습니다.
DATEADD(DAY, DATEADD(MONTH,'2009-05-01',1), -1)
하지만 특정 날짜의 마지막 날을 찾을 수 있도록 일반화하는 방법을 아는 사람이 있습니까?
SQL Server 2012부터는 EOMONTH 함수를 사용할 수 있습니다.
지정한 날짜가 포함된 월의 마지막 날을 반환합니다(선택 사항 오프셋 포함).
구문
EOMONTH ( start_date [, month_to_add ] )
어떻게... 주어진 날짜에 대한 월의 마지막 날을 찾을 수 있습니까?
SELECT EOMONTH(@SomeGivenDate)
여기 제 버전이 있습니다.스트링 조작이나 캐스팅이 필요하지 않으며, 각각 한 번씩 통화만 하면 됩니다.DATEADD
,YEAR
그리고.MONTH
함수:
DECLARE @test DATETIME
SET @test = GETDATE() -- or any other date
SELECT DATEADD(month, ((YEAR(@test) - 1900) * 12) + MONTH(@test), -1)
DAY() 함수를 사용하여 날짜를 얻을 수 있습니다.
dateadd(day, -1, dateadd(month, 1, dateadd(day, 1 - day(date), date)))
SQL 서버에서 작동합니다.
Declare @GivenDate datetime
SET @GivenDate = GETDATE()
Select DATEADD(MM,DATEDIFF(MM, 0, @GivenDate),0) --First day of the month
Select DATEADD(MM,DATEDIFF(MM, -1, @GivenDate),-1) --Last day of the month
이것이 오래된 질문이라는 것을 알지만, 여기 저에게 맞는 다른 해결책이 있습니다.
SET @dtDate = "your date"
DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@dtDate)+1,0))
그리고 다른 예를 찾고 있는 사람이 있다면 여기 링크 http://blog.sqlauthority.com/2007/08/18/sql-server-find-last-day-of-any-month-current-previous-next/ 가 있습니다.
이것이 다른 사람에게 도움이 되기를 바랍니다.넘치는 바위를 쌓아 올립니다.!!
SQL Server 2012 이상의 경우 EOMONTH를 사용하여 월의 마지막 날짜를 가져옵니다.
현재 달의 종료 날짜를 표시하는 SQL 쿼리
DECLARE @currentDate DATE = GETDATE()
SELECT EOMONTH (@currentDate) AS CurrentMonthED
다음 달의 종료 날짜를 표시하는 SQL 쿼리
DECLARE @currentDate DATE = GETDATE()
SELECT EOMONTH (@currentDate, 1 ) AS NextMonthED
다음 문장을 기반으로 합니다.
SELECT DATEADD(MONTH, 1, @x) -- Add a month to the supplied date @x
그리고.
SELECT DATEADD(DAY, 0 - DAY(@x), @x) -- Get last day of month previous to the supplied date @x
날짜 @x에 한 달을 추가한 다음 그 이전 달의 마지막 날을 검색하는 것은 어떻습니까(즉,제공된 날짜의 월 마지막 날)
DECLARE @x DATE = '20-Feb-2012'
SELECT DAY(DATEADD(DAY, 0 - DAY(DATEADD(MONTH, 1, @x)), DATEADD(MONTH, 1, @x)))
참고: 이 테스트는 SQL Server 2008 R2를 사용하여 수행되었습니다.
공식을 조금 더 확장하면 됩니다.
dateadd(day, -1,
dateadd(month, 1,
cast(month('5/15/2009') as varchar(2)) +
'/1/' +
cast(year('5/15/2009') as varchar(4)))
Microsoft SQL Server 2005를 사용하면 다음과 같이 작동합니다.
DATEADD(d,-1,DATEADD(mm, DATEDIFF(m,0,'2009-05-01')+1,0))
지난 달의 마지막 날을 가져올 WinSQL(즉, 오늘은 2017-02-09, 2017-01-31 반환: 날짜 추가(day, -day(), today())를 선택합니다.
다음 쿼리를 실행해 보십시오. 원하는 모든 것을 얻을 수 있습니다. :)
Declare @a date =dateadd(mm, Datediff(mm,0,getdate()),0)
Print('First day of Current Month:')
Print(@a)
Print('')
set @a = dateadd(mm, Datediff(mm,0,getdate())+1,-1)
Print('Last day of Current Month:')
Print(@a)
Print('')
Print('First day of Last Month:')
set @a = dateadd(mm, Datediff(mm,0,getdate())-1,0)
Print(@a)
Print('')
Print('Last day of Last Month:')
set @a = dateadd(mm, Datediff(mm,0,getdate()),-1)
Print(@a)
Print('')
Print('First day of Current Week:')
set @a = dateadd(ww, Datediff(ww,0,getdate()),0)
Print(@a)
Print('')
Print('Last day of Current Week:')
set @a = dateadd(ww, Datediff(ww,0,getdate())+1,-1)
Print(@a)
Print('')
Print('First day of Last Week:')
set @a = dateadd(ww, Datediff(ww,0,getdate())-1,0)
Print(@a)
Print('')
Print('Last day of Last Week:')
set @a = dateadd(ww, Datediff(ww,0,getdate()),-1)
Print(@a)
WinSQL: 지난달의 모든 레코드를 반환하고 싶었습니다.
where DATE01 between dateadd(month,-1,dateadd(day,1,dateadd(day,-day(today()),today()))) and dateadd(day,-day(today()),today())
이는 동일한 작업을 수행합니다.
where month(DATE01) = month(dateadd(month,-1,today())) and year(DATE01) = year(dateadd(month,-1,today()))
이 쿼리도 사용할 수 있습니다.
DECLARE @SelectedDate DATE = GETDATE()
SELECT DATEADD(DAY, - DAY(@SelectedDate), DATEADD(MONTH, 1 , @SelectedDate)) EndOfMonth
유용한 날짜 함수
선택한다.
GETDATE() AS [DateTime],
CAST(GETDATE() AS DATE) AS [Date],
DAY(GETDATE()) AS [Day of Month],
FORMAT(GETDATE(),'MMMM') AS [Month Name],
FORMAT(GETDATE(),'MMM') AS [Month Short Name],
FORMAT(GETDATE(),'MM') AS [Month No],
YEAR(GETDATE()) AS [Year],
CAST(DATEADD(DD,-(DAY(GETDATE())-1),GETDATE()) AS DATE) AS [Month Start Date],
EOMONTH(GETDATE()) AS [Month End Date],
CAST(DATEADD(M,-1,DATEADD(MM, DATEDIFF(M,0,GETDATE()),0)) AS DATE) AS [Previous Month Start Date],
CAST(DATEADD(S,-1,DATEADD(MM, DATEDIFF(M,0,GETDATE()),0)) AS DATE) AS [Previous Month End Date],
CAST(DATEADD(M,+1,DATEADD(MM, DATEDIFF(M,0,GETDATE()),0)) AS DATE) AS [Next Month Start Date],
CAST(DATEADD(D,-1,DATEADD(MM, DATEDIFF(M,0,GETDATE())+2,0)) AS DATE) AS [Next Month End Date],
CAST(DATEADD(WW, DATEDIFF(WW,0,GETDATE()),0) AS DATE) AS [First Day of Current Week],
CAST(DATEADD(WW, DATEDIFF(WW,0,GETDATE())+1,-1) AS DATE) AS [Last Day of Current Week],
CAST(DATEADD(WW, DATEDIFF(WW,0,GETDATE())-1,0) AS DATE) AS [First Day of Last Week],
CAST(DATEADD(WW, DATEDIFF(WW,0,GETDATE()),-1) AS DATE) AS [Last Day of Last Week],
CAST(DATEADD(WW, DATEDIFF(WW,0,GETDATE())+1,0) AS DATE) AS [First Day of Next Week],
CAST(DATEADD(WW, DATEDIFF(WW,0,GETDATE())+2,-1) AS DATE) AS [Last Day of Next Week]
나의 2센트:
select DATEADD(DAY,-1,DATEADD(MONTH,1,DATEADD(day,(0-(DATEPART(dd,'2008-02-12')-1)),'2008-02-12')))
라지
sql server 2005를 사용하면 다음과 같은 이점이 있습니다.
select dateadd(dd,-1,dateadd(mm,datediff(mm,0,YOUR_DATE)+1,0))
기본적으로 (SQL Server) 시작 시간으로부터 YOR_DATE의 월 수를 얻습니다.그런 다음 하나를 추가하여 다음 달의 시퀀스 번호를 얻습니다.그런 다음 이 월 수를 0에 추가하여 다음 달의 첫 번째 날 날짜를 얻습니다.이 값에서 날짜를 빼서 마지막 날짜인 YOR_DATE.
어떤 달의 31일인 기준 날짜(예: '20011231')를 지정합니다. 다음 을 사용합니다.
다음 절차(아래에 동일한 예 3개를 제시했지만 @dt 값만 다릅니다.)
declare @dt datetime;
set @dt = '20140312'
SELECT DATEADD(month, DATEDIFF(month, '20011231', @dt), '20011231');
set @dt = '20140208'
SELECT DATEADD(month, DATEDIFF(month, '20011231', @dt), '20011231');
set @dt = '20140405'
SELECT DATEADD(month, DATEDIFF(month, '20011231', @dt), '20011231');
SQL Server를 사용하여 월의 마지막 날을 찾을 수 있는 또 다른 방법은 다음과 같습니다.
SELECT DATEADD(MONTH,1,GETDATE())- day(DATEADD(MONTH,1,GETDATE()))
저는 다음과 같은 기능을 썼습니다, 작동합니다.
날짜/시간 데이터 유형을 반환합니다.0시간, 분, 초, 초, 밀리초.
CREATE Function [dbo].[fn_GetLastDate]
(
@date datetime
)
returns datetime
as
begin
declare @result datetime
select @result = CHOOSE(month(@date),
DATEADD(DAY, 31 -day(@date), @date),
IIF(YEAR(@date) % 4 = 0, DATEADD(DAY, 29 -day(@date), @date), DATEADD(DAY, 28 -day(@date), @date)),
DATEADD(DAY, 31 -day(@date), @date) ,
DATEADD(DAY, 30 -day(@date), @date),
DATEADD(DAY, 31 -day(@date), @date),
DATEADD(DAY, 30 -day(@date), @date),
DATEADD(DAY, 31 -day(@date), @date),
DATEADD(DAY, 31 -day(@date), @date),
DATEADD(DAY, 30 -day(@date), @date),
DATEADD(DAY, 31 -day(@date), @date),
DATEADD(DAY, 30 -day(@date), @date),
DATEADD(DAY, 31 -day(@date), @date))
return convert(date, @result)
end
사용하기 매우 쉽습니다. 2 예:
select [dbo].[fn_GetLastDate]('2016-02-03 12:34:12')
select [dbo].[fn_GetLastDate](GETDATE())
아래 링크에서 가장 많이 투표된 답변을 기반으로 다음과 같은 해결책을 생각해냈습니다.
declare @mydate date= '2020-11-09';
SELECT DATEADD(month, DATEDIFF(month, 0, @mydate)+1, -1) AS lastOfMonth
link: SQL에서 월의 첫 번째 날을 선택하려면 어떻게 해야 합니까?
일반 SQL에서 작동하는 답을 찾을 수 없어서 강제로 다음과 같이 대답했습니다.
SELECT *
FROM orders o
WHERE (MONTH(o.OrderDate) IN ('01','03','05','07','08','10','12') AND DAY(o.OrderDate) = '31')
OR (MONTH(o.OrderDate) IN ('04','06','09','11') AND DAY(o.OrderDate) = '30')
OR (MONTH(o.OrderDate) IN ('02') AND DAY(o.OrderDate) = '28')
---Start/End of previous Month
Declare @StartDate datetime, @EndDate datetime
set @StartDate = DATEADD(month, DATEDIFF(month, 0, GETDATE())-1,0)
set @EndDate = EOMONTH (DATEADD(month, DATEDIFF(month, 0, GETDATE())-1,0))
SELECT @StartDate,@EndDate
언급URL : https://stackoverflow.com/questions/1051488/get-the-last-day-of-the-month-in-sql
'sourcecode' 카테고리의 다른 글
Firebase child_added only get child added (0) | 2023.07.12 |
---|---|
Firebase 실시간 데이터베이스에 대한 무단 액세스를 방지하려면 어떻게 해야 합니까? (0) | 2023.07.12 |
GCM(현재 FCM)은 제한 없이 무료입니까? (0) | 2023.07.12 |
TypeScript 유형 무시 대소문자 (0) | 2023.07.07 |
"메모리가 8바이트 정렬"이라는 것은 무엇을 의미합니까? (0) | 2023.07.07 |