PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm việc với ngày tháng trong PostgreSQL


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 DEFAULTCURRENT_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ố:

  1. giá trị bạn muốn định dạng
  2. 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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL - Thay thế các thực thể HTML

  2. Làm cách nào để bạn nối hai bảng trên một trường khóa ngoài bằng cách sử dụng django ORM?

  3. Rails:FATAL - Xác thực ngang hàng không thành công cho người dùng (PG ::Lỗi)

  4. ứng dụng khách postgresql tốt cho windows?

  5. PostgreSQL - Viết sql động trong thủ tục được lưu trữ trả về tập kết quả