29/08/2021
LÀM VIỆC VỚI KIỂU NGÀY-GIỜ BẰNG MỘT SỐ HÀM BUILT-IN SQL TRONG PostgreSQL
✅ 𝟭. 𝗗𝗔𝗧𝗘_𝗧𝗥𝗨𝗡𝗖
Hàm DATE_TRUNC hiệu quả trong việc đưa nhanh ngày-giờ về ngày đầu tháng, ngày đầu tuần, ngày đầu năm,...
Ví dụ: có thể sử dụng chức năng này nếu bạn muốn vẽ các xu hướng KPI như Doanh số hàng quý, active users, đơn đặt hàng hàng tháng,...
SELECT DATE_TRUNC('month',calendar_date) AS Month,
COUNT(DISTINCT user_id) AS active_users
FROM usage
GROUP BY 1;
✅ 𝟮. 𝗖𝗨𝗥𝗥𝗘𝗡𝗧_𝗗𝗔𝗧𝗘
Có thể đây là hàm được sử dụng nhiều nhất trong tất cả các truy vấn. CURRENT_DATE như tên của chính nó sẽ cho biết ngày hiện tại.
Ví dụ: giả sử tôi muốn xem doanh số bán hàng của mình đang hoạt động như thế nào hàng tháng trong 12 tháng vừa rồi. Tôi có thể sử dụng current_date để lấy tháng gần nhất và trừ đi mười hai tháng để có đủ một năm.
SELECT DATE_TRUNC('month',calendar_date) AS Month,
SUM(sales) AS monthly_sales
FROM sales
WHERE calendar_date BETWEEN DATE_TRUNC('month',CURRENT_DATE) -INTERVAL '12 Months' AND DATE_TRUNC('month',calendar_date)
GROUP BY 1;
✅ 𝟯. 𝗗𝗔𝗧𝗘𝗗𝗜𝗙𝗙
Hàm để tính hiệu khoảng cách giữa hai ngày, chúng ta có thể chỉ định phần khoảng cách nàydưới dạng giây, phút, giờ, ngày, tuần, tháng, năm,...
Ví dụ: truy vấn bên dưới tính lượng người xem phim theo phút dựa trên thời gian người dùng bắt đầu và kết thúc phiên xem.
SELECT movie,
SUM(DATEDIFF ('minutes',watch_start_time,watch_end_time)) AS watch_minutes
FROM movie
GROUP BY 1;
✅ 𝟰. 𝗗𝗔𝗧𝗘_𝗣𝗔𝗥𝗧
Hàm DATE_PART trích xuất các giá trị của phần ngày tháng, có thể là Day of Week (DOW), ngày, giờ, tháng, năm,...
Ví dụ: truy vấn bên dưới phân tích số lượng phiên sử dụng (session) của 1 ứng dụng theo ngày trong tuần (Weekday) và cuối tuần (Weekend)
SELECT
CASE WHEN DATE_PART('dow',calendar_date) IN (1,6) THEN 'Weekend'
ELSE 'Weekday'
END AS time_of_week,
COUNT(DISTINCT session_id) AS sessions
FROM sessions
GROUP BY 1;
✅ 𝟱. 𝗧𝗢_𝗧𝗜𝗠𝗘𝗦𝗧𝗔𝗠𝗣
Hàm này chuyển đổi thời gian thành dạng thời gian có múi giờ và chúng ta có thể chọn định dạng mong muốn ở đầu ra. Thường sẽ phải sử dụng nó khi phân tích dữ liệu mà nguồn dữ liệu đang thu thập trong múi giờ UTC và một nguồn khác ở múi giờ local. Theo mặc định, múi giờ là UTC / GMT
SELECT to_timestamp('2011-12-18 04:38:15', 'YYYY-MM-DD HH24:MI:SS');
Result:
to_timestamp
----------------------
2011-12-19 04:38:15+00
✅ 𝟲. 𝗜𝗡𝗧𝗘𝗥𝗩𝗔𝗟
Sử dụng khi chúng ta muốn cộng thêm khoảng thời gian được chỉ định vào ngày mà chúng ta truy vấn.
Ví dụ: giả sử chúng ta có một tập dữ liệu chứa dữ liệu về một bài kiểm tra trực tuyến có thời lượng 30 phút và bài kiểm tra tự động kết thúc sau 30 phút. Nếu chúng ta chỉ có thời gian bắt đầu cho mỗi thí sinh, chúng ta có thể sử dụng để tính thời gian kết thúc cho mỗi thí sinh.
SELECT start_datetime+ INTERVAL '30 minutes'
FROM table_name;