提要:在本教程中,我们将向您介绍 PostgreSQL TIME 数据类型,并向您展示一些方便的函数来处理时间值。

TIME 数据类型简介

TIME 数据类型用于存储时间值。

column_name TIME(precision);

一个时间值可以有一个最多6位的精度。精度指定放置在第二个字段中的小数位数。TIME 数据类型需要8字节的存储空间,它的取值范围从 00:00:0024:00:00。以下是常用的 TIME 类型值的格式:

HH:MM   
HH:MM:SS
HHMMSS

比如:

01:02
01:02:03
010203

如果要指定精度,可以这样:

HH:MM.pppppp    
HH:MM:SS.pppppp
HHMMSS.pppppp

比如:

04:59.999999
04:05:06.777777
040506.777777

示例

首先,创建表:

CREATE TABLE shifts (
    id serial PRIMARY KEY,
    shift_name VARCHAR NOT NULL,
    start_at TIME NOT NULL,
    end_at TIME NOT NULL
);  

接下来,插入一些示例数据:

INSERT INTO shifts(shift_name, start_at, end_at)
VALUES('Morning', '08:00:00', '12:00:00'),
      ('Afternoon', '13:00:00', '17:00:00'),
      ('Night', '18:00:00', '22:00:00');

第三步,从该表中查询数据:

SELECT
    *
FROM
    shifts;

TIME with time zone 类型

除了 TIME 类型外,PostgreSQL 还提供了带时区的 TIME with time zone 类型。它占用12个字节,将时间和时区同时存储,取值范围从 00:00:00+145924:00:00-1459

下面是它的两个例子:

04:05:06 PST    
04:05:06.789-8  

处理时间值

获取当前时间

使用 CURRENT_TIME 获取当前时间:

SELECT CURRENT_TIME;

获取指定精度的当前时间:

SELECT CURREN_TIME(5);

获取本地时间:

SELECT LOCALTIME;

将时间值转换成其它时区

使用下面的语法:

[TIME with time zone] AT TIME ZONE time_zone

如:

SELECT LOCALTIME AT TIME ZONE 'UTC-7';

提取时间值的组成部分

语法如下:

EXTRACT(field FROM time_value);

field 可以是 hour, minute, second, milliseconds,如下所示:

SELECT
    LOCALTIME,
    EXTRACT (HOUR FROM LOCALTIME) as hour,
    EXTRACT (MINUTE FROM LOCALTIME) as minute, 
    EXTRACT (SECOND FROM LOCALTIME) as second,
    EXTRACT (milliseconds FROM LOCALTIME) as milliseconds; 

时间值的算术运算

可以对时间值进行算术运算,如:

SELECT time '10:00' - time '02:00';
SELECT LOCALTIME + interval '2 hours';
下一篇:PostgreSQL UUID类型