먼저 날짜 관련 함수를 소개합니다.
DATEDIFF |
먼저 해당 달의 첫째 날을 구하는 함수입니다.
해당 달의 첫째 날은 당근 "01"일 이겠죠?
-- 쿼리 : 현재달의 첫째 날 구하기 |
DATEDIFF()함수는 총 세가지 인자를 갖는데
첫번째 인자는 날짜부분인데, mm은 달을 나타냅니다.
두번째 인자는 시작일자인데, 여기는 0 이죠? 0은 '1900-01-01 00:00:00.000'을 의미합니다.
마지막 세번째 인자는 계산의 종료일자입니다. getdate()는 현재 날자와 시간을 리턴하는 함수이다.
즉 위 쿼리문의 의미는 1900-01-01 00:00:00.000과 현재 시간의 차이를 달의 수로 구하고
다시 DATEADD()함수를 통해 1900-01-01 00:00:00.000에 달의 차이를 더한 결과입니다.
그럼 해당 달의 첫째 일자가 나옵니다.
그럼 해당 달의 마지막 날짜는 ?
-- 쿼리1 : 현재 달의 마지막 날 구하기 |
쿼리1 방법은 현재 달의 첫째 날에다가 한 달을 더해 주고, 하루를 빼주면 현재 달의 마지막 날이 구해집니다.
엄밀히 말해 시간/분/초까지 따지면 마지막 순간은 아니지만 날짜 까지만 생각한다면 사용할 수 있는 쿼리문입니다.
쿼리2 방법은
DATEDIFF(mm, 0, getdate())은 1900-01-01 00:00:00.00와 현재의 개월 수를 구하고
DATEADD(mm, DATEDIFF(m, 0, getdate())+1, 0)는 1900-01-01 00:00:00.00에 구한 개월 수를 더합니다.
그러면 2003-12-01 00:00:00.000 이런 결과가 나올것입니다.
마지막으로 SELECT DATEADD(ms, -3, DATEADD(mm, DATEDIFF(m, 0, getdate())+1, 0))는
SQL Server에서 저장할 수 있는 하루의 마지막 milliseocond가 23:59:59.997이기 때문에
3 milliseconds를 빼주면 됩니다.
--현재 주의 월요일 구하기 |
DATEDIFF(yy, 0, getdate())는 1900-01-01 00:00:00.000과 현재의 차이를 년수로 구하고
DATEADD(yy, DATEDIFF(yy, 0, getdate()), 0) 는 1900-01-01 00:00:00.000에 차이난 년수를 더하는 쿼리입니다.
--현재 해의 첫째 날 구하기 |
DATEDIFF(yy, 0, getdate())는 1900-01-01 00:00:00.000과 현재의 차이를 년수로 구하고
DATEADD(yy, DATEDIFF(yy, 0, getdate()), 0) 는 1900-01-01 00:00:00.000에 차이난 년수를 더하는 쿼리입니다.
--현재 해의 마지막 날 구하기 |
1900-01-01 00:00:00.000 과 현재의 년수의 차이를 구하고 다시 1년을 더 더합니다.
그 차이를 1900-01-01 00:00:00.000에 대해주면, 즉 SELECT DATEADD(yy, DATEDIFF(yy, 0, getdate())+1, 0) 를 실행하시면 2004-01-01 00:00:00.000 결과가 나오는데, 여기다 3 milliseconds를 빼주면 원하는 결과를 구하실 수 있습니다.
--현재분기의 첫째날 구하기 |
날짜 부분의 qq 는 분기를 추출하는 인자입니다.
1900-01-01 00:00:00.000 과 현재의 분기 차이를 구하고, 그 차이를 1900-01-01 00:00:00.000에 대해주면, 현재 분기의 시작일을 구할수 있습니다.
--현재분기의 마지막날 구하기 |
날짜 부분의 qq 는 분기를 추출하는 인자입니다.
1900-01-01 00:00:00.000 과 현재의 분기 차이를 구하고, 그 차이를 1900-01-01 00:00:00.000에 대해주면, 현재 분기의 시작일을 구할수 있습니다.
--전 분기의 마지막날 구하기 |
날짜 부분의 qq 는 분기를 추출하는 인자입니다.
1900-01-01 00:00:00.000 과 현재의 분기 차이를 구하고, 그 차이를 1900-01-01 00:00:00.000에 대해주면, 현재 분기의 시작일을 구할수 있고, 3 milliseconds를 빼주면 원하는 결과를 구하실 수 있습니다.