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'
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
이것을 사용해 주세요
Server 2012의 경우
DATEFROMPARTS(year('2015-06-30'),month('2015-06-30'),1)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
'source' 카테고리의 다른 글
| SQL Server의 숨겨진 기능 (0) | 2023.04.07 |
|---|---|
| SQL Server 출력 절을 스칼라 변수로 변환 (0) | 2023.04.07 |
| 에서 무효 또는 예기치 않은 파라미터에 대해 발생하는 예외는 무엇입니까?인터넷? (0) | 2023.04.07 |
| 활성 SQL Server 연결을 확인하려면 어떻게 해야 합니까? (0) | 2023.04.07 |
| SQL 서버에서 중복 행 찾기 (0) | 2023.04.07 |