Tôi đề xuất date_trunc()
thay vì. Nó cắt bớt date
/ timestamp
đến đơn vị nhất định.
Vì hai lý do:
-
Bạn muốn số lượng đơn đặt hàng vào tháng 8 của một năm cụ thể, chẳng hạn như năm 2012, không tổng cho tháng 8 của tất cả các năm trong bảng.
date_trunc('month', orderdate)
thực hiện chính xác điều đó và ngăn chặn việc bạn ngẫu nhiên kết hợp nhiều năm. Bạn nhận được nhiều hàng trong nhiều năm. -
Bạn có thể
ORDER BY
vàGROUP BY
một biểu thức này, truy vấn nhanh hơn một chút.
SELECT to_char(date_trunc('month', orderdate), 'Mon') AS "Month" -- repeat expr.
,count(*) AS "Quantity"
FROM orders
GROUP BY date_trunc('month', orderdate) -- 1 item covers it
ORDER BY date_trunc('month', orderdate);
db <> fiddle tại đây
sqlfiddle
cũ
Đối với tên tháng đầy đủ, như ví dụ đầu tiên của bạn ngụ ý:
to_char(date_col, 'Month')
Đối với các tên không phải tiếng Anh, được bản địa hóa:
to_char(date_col, 'TMMonth')
Chi tiết trong sách hướng dẫn.