developer tip

올해의 첫 번째와 마지막 날짜를 얻는 방법은 무엇입니까?

optionbox 2020. 8. 20. 08:13
반응형

올해의 첫 번째와 마지막 날짜를 얻는 방법은 무엇입니까?


SQL Server 2000을 사용하여 올해의 첫 번째 날짜와 마지막 날짜를 어떻게 알 수 있습니까?

예상 출력 :

01/01/201231/12/2012


SELECT
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS EndOfYear

위의 쿼리는 12 월 31 일 초 자정의 datetime 값을 제공합니다. 이는 연중 마지막 순간보다 약 24 시간 부족한 것입니다. 12 월 31 일에 발생할 수있는 시간을 포함하려면 비교를 통해 다음 해의 첫 번째 시간과 비교해야합니다 <. 또는 현재 연도의 마지막 몇 밀리 초와 비교할 수 있지만 DATETIME이 아닌 다른 항목 (예 : DATETIME2)을 사용하는 경우 여전히 공백이 남습니다.

SELECT
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS LastDayOfYear,
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0) AS FirstOfNextYear,
   DATEADD(ms, -3, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0)) AS LastTimeOfYear

기술 세부 정보

이것은 1900 년 이후의 연도 수를 알아 낸 DATEDIFF(yy, 0, GETDATE())다음 0 = 1900 년 1 월 1 일 날짜에 추가하는 방식으로 작동 GETDATE()합니다. DATEDIFF(...)함수를 "년-1900."

 SELECT
   DATEADD(yy, DATEDIFF(yy, 0, '20150301'), 0) AS StartOfYearForMarch2015,
   DATEADD(yy, 2015 - 1900, 0) AS StartOfYearFor2015

DATEPART함수를 사용하여 얻은 현재 날짜에서 현재 연도를 얻을 수 있습니다.getUTCDate()

SELECT 
    '01/01/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate())), 
    '31/12/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate()))

간단히 작성하십시오.

select convert (date,DATEADD(YEAR,DATEDIFF(YEAR,0,GETDATE()),0))

해당 연도의 시작일.

select convert (date,DATEADD(YEAR, DATEDIFF(YEAR,0,GETDATE()) + 1, -1))  

여기에 아주 간단한 방법이 있습니다.

SELECT DATEFROMPARTS(YEAR(GETDATE()), 1, 1) AS 'First Day of Current Year';
SELECT DATEFROMPARTS(YEAR(GETDATE()), 12, 31) AS 'End of Current Year';

섹시하지는 않지만 작동합니다.


매년 첫 번째 날짜를 첫 번째 날짜로하고 31 일을 마지막 날짜로 지정해야합니다. 예를 들어 다음과 같이 연도를 해당 날짜와 월에 첨부하면됩니다.

 SELECT '01/01/'+cast(year(getdate()) as varchar(4)) as [First Day],
 '12/31/'+cast(year(getdate()) as varchar(4)) as [Last Day]

그해의 첫날과 마지막 날을 얻으려면 CONCAT함수를 사용할 수 있습니다 . 결과 값은 모든 유형으로 캐스트 될 수 있습니다.

CONCAT(YEAR(Getdate()),'-01-01') FirstOfYear,
CONCAT(YEAR(GETDATE()),'-12-31') LastOfYear

올해의 시작일 :

SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE())

올해 종료일 :

SELECT DATEADD(DD,-1,DATEADD(YY,DATEDIFF(YY,0,GETDATE())+1,0))

다음을 확인하십시오.

select convert(varchar(12),(DateAdd(month,(Month(getdate())-1) * -1, DateAdd(Day,(Day(getdate())-1) * -1,getdate()))),103) as StartYear,
       convert(varchar(12),DateAdd(month,12 - Month(getdate()), DateAdd(Day,(31 - Day(getdate())),getdate())),103) as EndYear

select to_date(substr(sysdate,1, 4) || '01/01'), to_date(substr(sysdate,1, 4) || '12/31') 
from dual

SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE())

print Cast('1/1/' + cast(datepart(yyyy, getdate()) as nvarchar(4)) as date)

주어진 연도 동안 모든 작업을 수행하는 데 관심이있는 것 같습니다. 실제로 이런 경우 다음 과 같이 YEAR () 함수 를 사용하는 것이 좋습니다 .

SELECT * FROM `table` WHERE YEAR(date_column) = '2012';

DAY ()MONTH ()도 마찬가지 입니다. MySQL / MariaDB 변형에도 사용할 수 있으며 SQL Server 2008에 도입되었습니다 (특정 2000에는 해당되지 않음).


Microsoft SQL Server (T-SQL)에서는 다음과 같이 수행 할 수 있습니다.

--beginning of year
select '01/01/' + LTRIM(STR(YEAR(CURRENT_TIMESTAMP)))

--end of year
select '12/31/' + LTRIM(STR(YEAR(CURRENT_TIMESTAMP)))

CURRENT_TIMESTAMP- 쿼리 실행시 SQL Server 날짜를 반환합니다.

YEAR- 현재 타임 스탬프의 연도 부분을 가져옵니다.

STR , LTRIM - these two functions are applied so that we can convert this into a varchar that can be concatinated with our desired prefix (in this case it's either first date of the year or the last date of the year). For whatever reason the result generated by the YEAR function has prefixing spaces. To fix them we use the LTRIM function which is left trim.


Another way: (Since SQL Server 2012)

SELECT
    DATEFROMPARTS(YEAR(GETDATE()), 1, 1) FirstDay,
    DATEFROMPARTS(YEAR(GETDATE()),12,31) LastDay

Try this:

DATE_FORMAT(NOW(),'01/01/%Y')
DATE_FORMAT(NOW(),'31/12/%Y')

If it reaches the 1st of Jan you might it to be still last years date.

select
convert(date, DATEADD(yy, DATEDIFF(yy, 0,  DATEadd(day, -1,getdate())), 0), 103 ) AS StartOfYear,
convert(date, DATEADD(yy, DATEDIFF(yy, 0, DATEDIFF(day, -1,getdate()))+1, -1), 103 )AS EndOfYear

---Lalmuni Demos---

create table Users
(
userid int,date_of_birth date
)

---insert values---

insert into Users values(4,'9/10/1991')

select DATEDIFF(year,date_of_birth, getdate()) - (CASE WHEN (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()),date_of_birth)) > getdate() THEN 1 ELSE 0 END) as Years, 
MONTH(getdate() - (DATEADD(year, DATEDIFF(year, date_of_birth, getdate()), date_of_birth))) - 1 as Months, 
DAY(getdate() - (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()), date_of_birth))) - 1 as Days,
from users

참고URL : https://stackoverflow.com/questions/13437362/how-to-get-the-first-and-last-date-of-the-current-year

반응형