답변:
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()))
DATETIME
문자열 대신 얻을 수 있는지 묻고 있었고 분명히 질문에 따라 예상되는 출력과 일치하지 않을 수 있습니다.
yyyyMMdd
모호하지 않습니다.
간단히 작성하십시오.
select convert (date,DATEADD(YEAR,DATEDIFF(YEAR,0,GETDATE()),0))
해당 연도의 시작일.
select convert (date,DATEADD(YEAR, DATEDIFF(YEAR,0,GETDATE()) + 1, -1))
매년 첫 번째 날짜를 첫 번째 날짜로하고 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))
다른 방법 : (SQL Server 2012 이후)
SELECT
DATEFROMPARTS(YEAR(GETDATE()), 1, 1) FirstDay,
DATEFROMPARTS(YEAR(GETDATE()),12,31) LastDay
다음을 확인하십시오.
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)
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 Server 날짜를 반환합니다.
YEAR- 현재 타임 스탬프의 연도 부분을 가져옵니다.
STR , LTRIM- 이 두 함수가 적용되어이를 원하는 접두사와 연결할 수있는 varchar로 변환 할 수 있습니다 (이 경우 연도의 첫 번째 날짜 또는 연도의 마지막 날짜). 어떤 이유로 든 YEAR 함수에 의해 생성 된 결과 에는 접두사 공백이 있습니다. 이를 수정하기 위해 왼쪽 트림 인 LTRIM 기능을 사용합니다 .
이 시도:
DATE_FORMAT(NOW(),'01/01/%Y')
DATE_FORMAT(NOW(),'31/12/%Y')
Msg 195, Level 15, State 10, Line 1 'NOW' is not a recognized function name.
--- 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