PostgreSQL에서 날짜 형식을 10-22에서 Oct-22로 변경하려면 TO_CHAR 함수를 사용할 수 있습니다. 이 함수를 사용하면 다양한 방식으로 날짜를 포맷팅할 수 있으며, 예를 들어 다음과 같습니다:
SELECT
TO_CHAR(TO_DATE('10-22', 'MM-YY'), 'Mon-YY') AS formatted_date
이 SQL 문에서:
TO_DATE('10-22', 'MM-YY')는MM-YY형식을 사용하여 문자열10-22를 날짜 타입으로 변환합니다.TO_CHAR(..., 'Mon-YY')는 이 날짜를 축약된 월 이름 뒤에 연도가 오는 형태로 포맷팅하여Oct-22를 생성합니다.
위에서 공유된 interval 파라미터가 포함된 Topics with No Response 쿼리의 버전 기반으로 한 또 다른 예시는 다음과 같습니다:
-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2025-01-01
-- null int :category_id
-- boolean :include_subcategories = false
-- text :interval = month
WITH no_response_total AS (
SELECT *
FROM (
SELECT t.id, t.created_at, MIN(p.post_number) first_reply
FROM topics t
LEFT JOIN posts p ON p.topic_id = t.id AND p.user_id != t.user_id AND p.deleted_at IS NULL AND p.post_type = 1
WHERE t.archetype <> 'private_message'
AND t.deleted_at ISNULL
AND (
:category_id IS NULL
OR t.category_id = :category_id
OR (
:include_subcategories
AND t.category_id IN (
SELECT id FROM categories WHERE parent_category_id = :category_id
)
)
)
GROUP BY t.id
) tt
WHERE tt.first_reply IS NULL OR tt.first_reply < 2
)
SELECT
TO_CHAR(date_trunc(:interval, nrt.created_at)::date, 'Mon-YY') AS period,
COUNT(nrt.id) AS topics_without_response
FROM no_response_total nrt
WHERE nrt.created_at::date BETWEEN :start_date AND :end_date
GROUP BY period, date_trunc(:interval, nrt.created_at)::date
ORDER BY date_trunc(:interval, nrt.created_at)::date ASC
참고로, 이 쿼리의 결과는 다음과 같이 보입니다:
| period | topics_without_response |
|---|---|
| Dec-23 | 123 |
| Jan-24 | 455 |
| Feb-24 | 789 |
| … | … |