반응형
DECLARE @old_datefirst INT
SELECT @old_datefirst = @@DATEFIRST
DECLARE @v_dayname_monday INT
SELECT @v_dayname_monday = 1
SET DATEFIRST @v_dayname_monday
DECLARE @v_date DATETIME
SELECT @v_date = '2009-08-01' ---특정 날짜 지정.
SELECT @v_date date
, DATEPART(year, @v_date) [Year]
, DATEPART(week, @v_date) [Week of Year]
, DATEPART(dayofyear, @v_date) [Day of Year]
, CASE
WHEN DATEPART(weekday, @v_date) > 1 THEN DATEADD(day, (DATEPART(weekday, @v_date)-1) * -1 , @v_date)
ELSE @v_date END [First-day of Week]
, CASE
WHEN DATEPART(weekday, @v_date) < 7 THEN DATEADD(day, 7-DATEPART(weekday, @v_date), @v_date)
ELSE @v_date END [Last-day of Week]
SET DATEFIRST @old_datefirst
/*
실행결과
date Year Week of Year Day of Year First-day of Week Last-day of Week
2009-08-01 2009 31 213 2009-07-27 2009-08-02
*/
- 날짜 변환 -
- 날짜 변환 -
의미 | PARAMETER | QUERY문 |
mon dd yyyy hh:mmAM (or PM) | 100 | select convert(char, getdate(), 100) |
mm/dd/yyyy | 101 | select convert(char, getdate(), 101) |
yyyy.mm.dd | 102 | select convert(char, getdate(), 102) |
dd/mm/yyyy | 103 | select convert(char, getdate(), 103) |
dd.mm.yyyy | 104 | select convert(char, getdate(), 104) |
dd-mm-yyyy | 105 | select convert(char, getdate(), 105) |
dd mon yyyy | 106 | select convert(char, getdate(), 106) |
mon dd, yyyy | 107 | select convert(char, getdate(), 107) |
hh:mm:ss | 108 | select convert(char, getdate(), 108) |
mon dd yyyy hh:mm:ss:mmmAM (or PM) | 109 | select convert(char, getdate(), 109) |
mm-dd-yyyy | 110 | select convert(char, getdate(), 110) |
yyyy/mm/dd | 111 | select convert(char, getdate(), 111) |
yyyymmdd | 112 | select convert(char, getdate(), 112) |
dd mon yyyy hh:mm:ss:mmm | 113 | select convert(char, getdate(), 113) |
hh:mm:ss:mmm(24h) | 114 | select convert(char, getdate(), 114) |
yyyy-mm-dd hh:mm:ss(24h) | 120 | select convert(char, getdate(), 120) |
yyyy-mm-dd hh:mm:ss.mmm | 121 | select convert(char, getdate(), 121) |
대표적으로 많이 쓰는 얘들이 위와 같다.
/*
-- 해당 주의 시작일과 종료일 구하는 방법
*/
DECLARE @NOWDATE DATETIME
SELECT @NOWDATE = CONVERT(VARCHAR, GETDATE(), 23) --GETDATE()
--지난주를 구하는 경우
--SELECT @NOWDATE = CONVERT(VARCHAR, DATEADD(WW, -1,GETDATE()), 23)
DECLARE @WYEAR INT -- 해당 년도
DECLARE @WWEEK INT -- 해당 주차
DECLARE @SWEEK DATETIME -- 해당주 시작일
DECLARE @EWEEK DATETIME -- 해당주 종료일
DECLARE @WWEEK INT -- 해당 주차
DECLARE @SWEEK DATETIME -- 해당주 시작일
DECLARE @EWEEK DATETIME -- 해당주 종료일
SELECT
@WYEAR = DATEPART(year, @NOWDATE)
, @WWEEK = DATEPART(week, @NOWDATE)
, @SWEEK =
(CASE
WHEN DATEPART(weekday, @NOWDATE) > 1 THEN DATEADD(day, (DATEPART(weekday, @NOWDATE)) * -1 , @NOWDATE)
ELSE @NOWDATE END
)
, @EWEEK =
(CASE
WHEN DATEPART(weekday, @NOWDATE) < 7 THEN DATEADD(day, 7-DATEPART(weekday, @NOWDATE), @NOWDATE)
ELSE @NOWDATE END
)
@WYEAR = DATEPART(year, @NOWDATE)
, @WWEEK = DATEPART(week, @NOWDATE)
, @SWEEK =
(CASE
WHEN DATEPART(weekday, @NOWDATE) > 1 THEN DATEADD(day, (DATEPART(weekday, @NOWDATE)) * -1 , @NOWDATE)
ELSE @NOWDATE END
)
, @EWEEK =
(CASE
WHEN DATEPART(weekday, @NOWDATE) < 7 THEN DATEADD(day, 7-DATEPART(weekday, @NOWDATE), @NOWDATE)
ELSE @NOWDATE END
)
select @NOWDATE Date , @WYEAR Year, @WWEEK Week, @SWEEK Week_Start, @EWEEK Week_End
/*
-- varchar(14)인 경우
DECLARE @VNOWDATE VARCHAR(14)
DECLARE @VSWEEK VARCHAR(14)
DECLARE @VEWEEK VARCHAR(14)
SET @VNOWDATE = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, @NOWDATE, 20),'-',''),':',''),' ','')
SET @VSWEEK = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, @SWEEK, 20),'-',''),':',''),' ','')
SET @VEWEEK = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, @EWEEK, 20),'-',''),':',''),' ','')
SELECT @VNOWDATE Date, @WYEAR Year, @WWEEK Week, @VSWEEK Week_Start, @VEWEEK Week_End
-- //varchar(14)인 경우
*/
-- varchar(14)인 경우
DECLARE @VNOWDATE VARCHAR(14)
DECLARE @VSWEEK VARCHAR(14)
DECLARE @VEWEEK VARCHAR(14)
SET @VNOWDATE = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, @NOWDATE, 20),'-',''),':',''),' ','')
SET @VSWEEK = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, @SWEEK, 20),'-',''),':',''),' ','')
SET @VEWEEK = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, @EWEEK, 20),'-',''),':',''),' ','')
SELECT @VNOWDATE Date, @WYEAR Year, @WWEEK Week, @VSWEEK Week_Start, @VEWEEK Week_End
-- //varchar(14)인 경우
*/
반응형
LIST