摘要:在本教程中,你将了解 PostgreSQL 的 TIME 数据类型以及如何使用它在数据库中存储时间数据。
在 PostgreSQL 中,您可以使用 TIME 数据类型在表中存储时间数据(不包含日期)。
以下是定义 TIME 列的语法:
CREATE TABLE table_name (
column_name TIME,
...
);时间列可以存储从 00:00:00 到 24:00:00 的时间值。PostgreSQL 使用8字节来存储时间值。
要为 TIME 列设置默认值,需使用 DEFAULT 约束:
CREATE TABLE table_name(
column_name TIME DEFAULT default_time,
...
);如果您想将当前时间设置为默认值,可以按如下方式使用 CURRENT_TIME 函数:
CREATE TABLE table_name(
column_name TIME DEFAULT CURRENT_TIME,
...
);PostgreSQL 接受多种时间格式,为你提供了灵活性。不过,建议使用 ISO 8601 格式,其时间输入格式为HH:MM:SS ,例如 09:30:45 。
PostgreSQL 允许你设置各种时间输出格式,就像时间输入格式一样。默认格式是 ISO 8601 格式。
PostgreSQL 允许您存储带有小数秒精度的时间,最多可达6位。
以下语句定义了一个具有小数秒精度的 TIME 列:
CREATE TABLE table_name (
column_name TIME(precision)
);精度的有效值为1到6。
要使用具有小数秒精度的时间值,请使用以下格式:
HH:MI:SS.pppppp在该语法中,p 决定精度。例如, 09:30:45.123456。
要获取当前时间,需使用 curent_time 函数:
SELECT current_time;输出:
current_time
--------------------
11:42:54.539691-07current_time 返回 PostgreSQL 运行所在时区的时间以及秒的小数部分精度。
要去除小数秒精度,请将精度设为零并传递给 current_time 函数:
SELECT current_time(0);输出:
current_time
--------------
11:43:07-07要获取当前的本地时间,可使用 localtime 函数:
SELECT localtime;输出:
localtime
-----------------
11:43:18.576448不含小数秒时:
SELECT localtime(0);输出:
localtime
-----------
11:43:32以下示例创建了一个名为 schedules 的表,其中包含一个 TIME 列:
CREATE TABLE schedules (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
employee VARCHAR(100) NOT NULL,
start_at TIME NOT NULL,
end_at TIME NOT NULL
);时间表有两个 TIME 列,分别是开始 (start) 和结束 (end) ,用于表示日程的开始时间和结束时间。
以下示例将带有输入时间值的新行插入到 schedules 表中:
INSERT INTO
schedules (employee, start_at, end_at)
VALUES
('John Doe', '08:00:00', '12:00:00'),
('John Doe', '13:00:00', '17:00:00')
RETURNING *;输出:
id | employee | start_at | end_at
----+----------+----------+----------
1 | John Doe | 08:00:00 | 12:00:00
2 | John Doe | 13:00:00 | 17:00:00在本示例中,我们明确使用 ISO 8601 格式的时间值 hh:mm:ss
extract() 函数从时间值中提取可以是小时、分钟和秒的字段。
例如,以下语句使用 extract() 函数从 start_at 列中提取小时、分钟和秒:
SELECT
employee,
start_at,
extract(hour from start_at) h,
extract(minute from start_at) m,
extract(second from start_at) s
FROM
schedules;输出:
employee | start_at | h | m | s
----------+----------+----+---+----------
John Doe | 08:00:00 | 8 | 0 | 0.000000
John Doe | 13:00:00 | 13 | 0 | 0.000000第二个包含小数部分。要移除它,你可以使用强制转换运算符 :: 将秒强制转换为整数。
SELECT
employee,
start_at,
extract(hour from start_at) h,
extract(minute from start_at) m,
extract(second from start_at)::INT s
FROM
schedules;输出:
employee | start_at | h | m | s
----------+----------+----+---+---
John Doe | 08:00:00 | 8 | 0 | 0
John Doe | 13:00:00 | 13 | 0 | 0- 使用
PostgreSQL的TIME数据类型在表中存储时间值。 - 使用
extract()函数从时间值中提取小时、分钟和秒。