SQL) date -> 요일로 변환 시, TO_CHAR 함수에서의 주의점

최정윤·2025년 12월 22일

SQL을 연습할 겸, solvesql에서 진행하는 Advent of SQL 2025 🎅 에 참여 중이다.

12월 22일자 문제를 푸는 도중 알게 된 것에 대한 간단 공유.

상황

datetime 타입의 칼럼을 요일로 변환해야 했다.

풀이방법

TO_CHAR(칼럼명, 'Day')

를 사용해서 변환.

문제상황

  • 제출: Thursday
  • 정답: Thursday

???????
뭘 잘못한거지??????????

원인

PostgreSQL의 TO_CHAR 함수 스펙을 제대로 알지 못해 발생한 문제다.

TO_CHAR 함수 스펙을 확인해보자.

9char을 맞추기 위해 공백 패딩이 들어가있다고 한다.
오류 문구를 다시 보니 Thursday 가 아닌 Thursday 임을 확인할 수 있었다.

해결

TRIM 함수쓰기!

TRIM(TO_CHAR(칼럼명, 'Day'))

TO_CHAR(칼럼명, 'FMDay')를 쓰면 공백이 없는 요일명을 반환하긴하나, 이는 PostgreSQL전용 기능이므로, 범용성을 고려하면 TRIM을 사용하는게 더 좋다.

번외

TO_CHAR(칼럼명, 'Day')는 왜 공백 포함하여 9자를 맞출까?

1. 왜 9자?

Wednesday 가 가장 긴 요일명인데, 이게 9자여서.

2.공백을 왜 넣을까?

보고서, 터미널 UI 등으로 출력 시 정렬되어보이기 위함.

TO_CHAR 함수의 의도가 '데이터 추출'보다는 '출력 포맷 맞추기'인 것으로 보인다. 참고로 PostgreSQL외의 다른 DBMS도 동일하게 공백포함하여 출력된다고 한다.


오랜만에 이런 함수 스펙 관련된 이슈를 마주한듯하다. 코딩테스트 준비를 하다보면 사소해보이지만 중요한 지식공백을 발견할 수 있어서 참 좋다.

profile
제품을 통해 가치를 전달합니다.

0개의 댓글