programing

올해 첫 번째와 마지막 날짜를 어떻게 얻습니까?

mbctv 2023. 4. 16. 15:37
반응형

올해 첫 번째와 마지막 날짜를 어떻게 얻습니까?

SQL Server 2000을 사용하여 올해 처음과 마지막 날짜를 얻으려면 어떻게 해야 합니까?

예상 출력:

01/01/2012그리고.31/12/2012

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

위의 쿼리는 12월 31일 시작 시 자정에 대한 날짜/시간 값을 제공합니다.이는 한 해의 마지막 순간에 비해 약 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

기타 기간

이 접근법에는 두 가지 좋은 측면이 있습니다. 뛰어난 퍼포먼스와 다른 기간 동안 발생하는 두 가지 요소를 모두 대체하여 쉽게 변경할 수 있습니다.yy(=년): 다른 문자열:

yy, yyyy    year
qq, q       quarter
mm, m       month
wk, ww      week 

(주 단위 주의: 시작일은 서버 설정에 따라 다릅니다.)

기술 상세

이것은 1900년 이후부터의 연수를 계산함으로써 동작합니다.DATEDIFF(yy, 0, GETDATE())그리고 그것을 0 = 1900년 1월 1일에 더한다.이것은, 임의의 날짜에 동작하도록 변경할 수 있습니다.GETDATE()부분 또는 임의의 연도를 치환하여DATEDIFF(...)"Year - 1900"으로 기능합니다.

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

여기 꽤 간단한 방법이 있습니다.

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

섹시하진 않지만 효과가 있어

다음을 사용하여 현재 연도를 얻을 수 있습니다.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))  

다른 방법: (SQL Server 2012 이후)

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

매년 첫 번째 날짜를 첫 번째 날짜로, 마지막 날짜를 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 CONCAT(year(now()), '-01-01') as start, -- fist day of current year
       CONCAT(year(now()), '-31-12') as end;   -- last day of current year

그 결과, 다음과 같습니다.start : 2020-01-01 and end : 2020-31-12날짜 형식입니다.

금년도 개시일의 경우:

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 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은 제외).

1년 중 첫 번째 날짜와 마지막 날짜를 얻는 가장 좋은 방법은

SELECT CAST(CAST(YEAR(DATEADD(YEAR,-1,GETDATE())) AS VARCHAR) + '-' + '01' + '-' + '01' AS DATE) FIRST_DATE
SELECT CAST(CAST(YEAR(DATEADD(YEAR,-1,GETDATE())) AS VARCHAR) + '-' + '12' + '-' + '31' AS DATE) LAST_DATE
select to_date(substr(sysdate,1, 4) || '01/01'), to_date(substr(sysdate,1, 4) || '12/31') 
from dual

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 서버 날짜를 반환합니다.

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

STR , LTRIM - 이 두 가지 함수가 적용되어 원하는 프레픽스와 조합할 수 있는 varchar로 변환됩니다(이 경우 1년 중 첫 번째 날짜 또는 1년 중 마지막 날짜).어떤 이유로든 YEAR 함수에 의해 생성된 결과에는 접두사 공백이 있습니다.이를 고정하기 위해 좌측 트림인 LTRIM 기능을 사용합니다.

만약 1월 1일이 되면 당신은 여전히 작년 날짜일 수도 있습니다.

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

이것을 시험해 보세요.

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

---Lalmuni 데모---

create table Users
(
userid int,date_of_birth date
)

---값 삽입---

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

반응형