EXTRACT
EXTRACT(field FROM source)
extract 函数从日期或时间的数值里抽取子域,比如年、小时等。source 必须是一个
timestamp、time 或interval 类型的值表达式(类型为date 的表达式转换为timestamp,因此
也可以用)
。field 是一个标识符或者字符串,它指定从源数据中抽取的域。extract 函数返回
类型为double precision 的数值。field 的取值范围如下所示。
century
世纪。第一个世纪从0001-01-01 00:00:00 AD 开始。这个定义适用于所有使用阳历的国
家。没有0 世纪,直接从公元前1 世纪到公元1 世纪。
示例:
gbase=# SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13');
date_part
-----------
20
(1 row)
day
如果source 为timestamp,表示月份里的日期(1-31)
。
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
201
gbase=# SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40');
date_part
-----------
16
(1 row)
如果source 为interval,表示天数。
gbase=# SELECT EXTRACT(DAY FROM INTERVAL '40 days 1 minute');
date_part
-----------
40
(1 row)
decade
年份除以10。
gbase=# SELECT EXTRACT(DECADE FROM TIMESTAMP '2001-02-16 20:38:40');
date_part
-----------
200
(1 row)
dow
每周的星期几,星期天(0)到星期六(6)
。
gbase=# SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40');
date_part
-----------
5
(1 row)
doy
一年的第几天。取值范围为1~365/366。
gbase=# SELECT EXTRACT(DOY FROM TIMESTAMP '2001-02-16 20:38:40');
date_part
-----------
47
(1 row)
epoch
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
202
如果source 为timestamp with time zone,表示自1970-01-01 00:00:00-00 UTC 以来的秒
数(结果可能是负数)
;
如果source 为date 和timestamp,表示自1970-01-01 00:00:00-00 当地时间以来的秒数;
如果source 为interval,表示时间间隔的总秒数。
gbase=# SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16
20:38:40.12-08');
date_part
--------------