Giới thiệu
Khả năng lưu trữ các giá trị ngày tháng bên trong cơ sở dữ liệu của bạn cho phép bạn thêm yếu tố thời gian vào các truy vấn và phân tích dữ liệu của mình. Điều quan trọng là phải biết cách làm việc với các loại ngày trong cơ sở dữ liệu tương ứng của bạn để bạn có thể chính xác trong báo cáo của mình cho dù đó là thông tin đặt hàng, tuổi của mọi người hoặc bất kỳ trường hợp sử dụng nào khác.
Trong hướng dẫn này, chúng ta sẽ thảo luận về việc lưu trữ DATE
các loại trong PostgreSQL và các cách khác nhau mà bạn có thể làm việc với chúng.
PostgreSQL DATE
kiểu dữ liệu
DATE
nhập vào PostgreSQL có thể lưu trữ một ngày mà không có giá trị thời gian liên quan:
DATE
PostgreSQL sử dụng 4 byte để lưu trữ giá trị ngày tháng. Phạm vi giá trị cho giá trị ngày trong PostgreSQL là 4713 trước Công nguyên đến 5874897 sau Công nguyên.
Khi lưu trữ giá trị ngày tháng, PostgreSQL sử dụng yyyy-mm-dd
định dạng v.d. Năm 1994-10-27. Định dạng này cũng được sử dụng trong PostgreSQL để chèn dữ liệu.
Trong PostgreSQL, có thể đặt giá trị ngày mặc định của ngày hiện tại. Điều này có thể được thực hiện khi tạo bảng của bạn bằng cách sử dụng DEFAULT
và CURRENT_DATE
từ khóa. last_checkout
cột từ bảng kiểm tra thư viện của chúng tôi chấp nhận ngày hiện tại theo mặc định:
CREATE TABLE checkouts ( author_id serial PRIMARY KEY, author_name VARCHAR (255) NOT NULL, book_title VARCHAR (255) NOT NULL, published_date DATE NOT NULL, last_checkout DATE NOT NULL DEFAULT CURRENT_DATE);
Theo cấu trúc bảng này, chúng ta có thể chèn dữ liệu bằng INSERT INTO
tuyên bố:
INSERT INTO checkouts (author_name, book_title, published_date)VALUES('James Joyce', 'Ulysses', '1922-02-02');
Sau đó, khi truy vấn checkouts
bảng, chúng tôi nhận được như sau:
SELECT * FROM checkouts; author_id | author_name | book_title | published_date | last_checkout -----------+-------------+------------+----------------+--------------- 1 | James Joyce | Ulysses | 1922-02-02 | 2021-09-27(1 row)
PostgreSQL DATE
chức năng
Bằng cách biết thông tin chi tiết của DATE
gõ vào PostgreSQL, sau đó bạn có thể sử dụng các hàm làm việc với thông tin mà bạn lưu trữ. Chúng ta sẽ đi qua một số chức năng phổ biến được tạo ra từ bảng được giới thiệu trong phần trước.
Lấy ngày hiện tại
Trong PostgreSQL, bạn có thể lấy ngày và giờ hiện tại bằng cách sử dụng NOW()
tích hợp sẵn hàm số. Câu lệnh sau sẽ trả về cả ngày và giờ:
SELECT NOW(); now ------------------------------- 2021-09-27 15:22:53.679985+02(1 row)
Nếu thời gian không được quan tâm, bạn cũng có thể chỉ định để chỉ trả về ngày bằng dấu hai chấm đôi ::
để truyền một DATETIME
giá trị đến DATE
giá trị:
SELECT NOW()::date; now ------------ 2021-09-27(1 row)
Sử dụng CURRENT_DATE
là một cách khác để lấy ngày hiện tại như được minh họa bên dưới:
SELECT CURRENT_DATE; current_date -------------- 2021-09-27(1 row)
Cả ba tùy chọn này sẽ trả về cho bạn ngày tháng trong yyyy-mm-dd
định dạng. Trong PostgreSQL, bạn có thể điều chỉnh định dạng của đầu ra này nếu muốn.
Xuất giá trị ngày ở định dạng cụ thể
Để xuất giá trị ngày ở một định dạng cụ thể, bạn sử dụng TO_CHAR()
hàm số. Hàm này chấp nhận hai tham số:
- giá trị bạn muốn định dạng
- mẫu xác định định dạng đầu ra
SELECT TO_CHAR(NOW()::date, 'dd/mm/yyyy'); to_char ------------ 27/09/2021(1 row)
Bạn cũng có thể hiển thị ngày ở định dạng như Sep 27, 2021
:
SELECT TO_CHAR(NOW():: DATE, 'Mon dd, yyyy'); to_char -------------- Sep 27, 2021(1 row)
Tùy thuộc vào yêu cầu của hệ thống, bạn có thể cần một ngày được định dạng theo một cách cụ thể. Đây là một tình huống mà việc có thể chỉ định đầu ra trong PostgreSQL là hữu ích.
Lấy khoảng thời gian giữa hai ngày
PostgreSQL cho phép bạn lấy khoảng thời gian giữa hai ngày bằng cách sử dụng -
nhà điều hành. Sử dụng toán tử này cho phép bạn tính toán những thứ như nhiệm kỳ của một nhân viên hoặc thời gian kể từ khi xuất bản sách.
Trong ví dụ của chúng tôi, chúng tôi muốn tìm xem đã bao nhiêu ngày kể từ Ulysses của Joyce đã được xuất bản bằng cách trừ đi ngày hiện tại cho published_date
:
SELECT author_name, book_title, now()::date - published_date as diffFROM checkouts;
Dẫn đến:
author_name | book_title | diff -------------+------------+---------------------------- James Joyce | Ulysses | 36397 days (1 row)
Tính tuổi bằng cách sử dụng các giá trị ngày
Chúng ta có thể tiếp tục với cùng một ví dụ để tính tuổi ở ngày hiện tại theo năm, tháng và ngày bằng cách sử dụng AGE()
hàm số. Câu lệnh sau sử dụng AGE()
hàm để tính tuổi của một ấn phẩm từ thư viện của chúng tôi checkouts
bảng:
SELECT author_name, book_title, AGE(published_date)FROM checkouts;
Với chức năng này, chúng tôi có thể tính toán xem một cuốn sách trong kho cũ là bao nhiêu:
author_name | book_title | age -------------+------------+------------------------- James Joyce | Ulysses | 99 years 7 mons 25 days(1 row)
Điều quan trọng cần lưu ý là nếu bạn chuyển một ngày vào AGE()
, sau đó nó sẽ tự động sử dụng ngày hiện tại để trừ và tính toán. Bạn cũng có thể chuyển hai ngày vào hàm để tính tuổi, chẳng hạn như:
SELECT author_name, book_title, AGE('2000-01-01',published_date),FROM checkouts;
Dẫn đến:
author_name | book_title | age -------------+------------+-------------------------- James Joyce | Ulysses | 77 years 10 mons 27 days(1 row)
Trích xuất năm, quý, tháng, tuần hoặc ngày từ một giá trị ngày
Hàm cuối cùng mà chúng ta sẽ đề cập đến là EXTRACT()
trong PostgreSQL cho phép bạn tách các thành phần của ngày như năm, quý, tháng và ngày.
Câu lệnh sau đây rút ra năm, tháng và ngày kể từ ngày xuất bản của Ulysses :
SELECT author_name, book_title, EXTRACT(YEAR FROM published_date) AS YEAR, EXTRACT(MONTH FROM published_date) AS MONTH, EXTRACT(DAY FROM published_date) AS DAY FROM checkouts;
Kết quả sẽ như sau:
author_name | book_title | year | month | day -------------+------------+------+-------+----- James Joyce | Ulysses | 1922 | 2 | 2(1 row)
Đây là một chức năng hữu ích cần lưu ý khi bạn có thể chỉ cần một phần của giá trị ngày tháng cho một phép tính với dữ liệu của mình chẳng hạn.
Kết luận
Trong hướng dẫn này, chúng tôi đã đề cập đến những điều cơ bản về những gì bạn có thể làm với DATE
kiểu dữ liệu trong PostgreSQL. Điều quan trọng là phải biết cách dữ liệu ngày tháng hoạt động bên trong cơ sở dữ liệu của bạn. Nắm bắt được các cách bạn có thể truy cập và vận hành trên nó cho phép bạn thực hiện các phép tính tuổi, thực hiện các phép trích xuất trong các truy vấn của mình và cũng có thể định cấu hình đầu ra của bạn nếu cần để phù hợp với các yêu cầu của hệ thống khác.