postgresql에서 어제 날짜와 내일 날짜를 구하는 방법을 알아보겠습니다.
현재 시간을 구하는 함수는 now()입니다. 여기서 '1 days'::interval을 뺀 값을 yesterday로 명명하였습니다.
결과를 볼까요? 그랬더니, 2023년 5월 23일 22시 24분 16.752초 +0900이 나옵니다.
now() 리턴값의 type을 pg_typeof라는 함수로 할 수 있습니다.
timestamp with time zone이라고 되어 있습니다. 즉 timezone입니다. 이 문서에서 table 9.32는 Date와 Time을 연산할 때 어떤 결과가 나오지에 대해서 설명합니다. timestamp와 interval을 더하면 timestamp가 나오게 됩니다. now()에 '1 days'::interval을 빼 버렸는데요. 이 경우, 1일 이전의 timestamp가 나오게 됩니다.
여기까지 별로 어렵지 않지요? 다음으로 넘어갑시다.
남은 과제는 어떻게 timestamp를 YYYY-MM-DD 꼴로 바꾸냐는 것입니다. 이것 역시 문서를 보면 쉽게 파악할 수 있습니다. to_char라는 함수로 timestamp와 string format을 주면 형식에 맞게 문자열로 변환해 버리게 됩니다.
현재 시각에서 1 days를 빼 버렸기 때문에 어제 날짜인 2023년 5월 23일이 나옵니다. 이를 YYYY-MM-DD 형식으로 바꾸려고 합니다. 4자리 년도, 2자리 월, 2자리 일 형식입니다. 고로 위와 같이 작성하시면 됩니다.
2023-05-23. 의도하던 결과가 나왔습니다. 고로 하루 전 날짜를 구한다면 to_char(now() - '1 days'::interval, 'YYYY-MM-DD') 로 해 주면 되겠군요. 내일 날짜는 어떻게 구할까요?
그냥 now()에 '1 days'::interval만 더하면 됩니다. 그러면 하루 지난 시각을 표시하게 됩니다.
2023년 5월 25일이 나오네요. 요약하면 현재 timestamp에 '1 days'::interval을 더하면 내일, 빼면 어제를 구할 수 있습니다.
1주일 후의 날짜를 구할 수도 있을까요? 당연합니다. interval은 week 또한 표현할 수 있습니다. 뒤에 W, 혹은 Weeks를 붙이면 됩니다. 예를 들어 '2W'는 2주를 의미합니다. 이것 말고도, interval에는 몇 년을 뜻하는 'Y', 몇 달을 뜻하는 'M', 몇 시간을 뜻하는 'H', 몇 분을 뜻하는 'M', 몇 초를 뜻하는 'S'가 있어요. 해당 쿼리는 현재 시각으로부터 1주 뒤 시각을 구하는 것입니다.
고로, w_after에는 7일이 지난 시각이 표시되게 됩니다.
'코딩 > Sql' 카테고리의 다른 글
postgresql string_agg 함수 정렬과 중복 제거를 알아봅시다. (0) | 2023.06.16 |
---|---|
postgresql with 여러개 선언해서 사용하는 방법을 알아봅시다. (1) | 2023.06.12 |
postgresql materialized view와 view의 차이가 무엇인지 알아봅시다. (1) | 2023.05.13 |
dbeaver 테이블 내보내기 불러오기 하는 방법을 알아봅시다. (0) | 2023.03.21 |
postgresql returning을 이용해서 업데이트 된 결과를 얻어와 봅시다. (0) | 2023.03.13 |
최근댓글