9.9. ʱ��/���ں����Ͳ�����

Table 9-26 ��ʾ�� PostgreSQL ��������ڴ�������/ʱ����ֵ�ĺ��������һ����������ϸ�ڡ� Table 9-25 ��ʾ�˻������������� ��+��* �ȵȣ�����Ϊ�� �����ʽ����صĺ��������Բο�Section 9.8�� ��Ӧ�ú���Ϥ���� Section 8.5 ������/ʱ���������͵ı���֪ʶ��

�������������ĺ����Ͳ��������յ�time����timestamp����ʵ���϶��������ֿ��ܣ� һ���ǽ���time with time zone �� timestamp with time zone�� ����һ����time without time zone ���� timestamp without time zone�� ���ڼ򻯿��ǣ���Щ����û�ж�����ʾ���������У�+ �� * �����������Կɽ����IJ������Է�ʽ���ڵ� �����磬date + integer �� integer + date��������ֻ��ʾ�������Ľ������������е�һ����

Table 9-25. ����/ʱ�������

�������������
+ date '2001-09-28' + integer '7'date '2001-10-05'
+ date '2001-09-28' + interval '1 hour'timestamp '2001-09-28 01:00'
+ date '2001-09-28' + time '03:00'timestamp '2001-09-28 03:00'
+ interval '1 day' + interval '1 hour'interval '1 day 01:00'
+ timestamp '2001-09-28 01:00' + interval '23 hours'timestamp '2001-09-29 00:00'
+ time '01:00' + interval '3 hours'time '04:00'
- - interval '23 hours'interval '-23:00'
- date '2001-10-01' - date '2001-09-28'integer '3'
- date '2001-10-01' - integer '7'date '2001-09-24'
- date '2001-09-28' - interval '1 hour'timestamp '2001-09-27 23:00'
- time '05:00' - time '03:00'interval '02:00'
- time '05:00' - interval '2 hours'time '03:00'
- timestamp '2001-09-28 23:00' - interval '23 hours'timestamp '2001-09-28 00:00'
- interval '1 day' - interval '1 hour'interval '23:00'
- timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00'interval '1 day 15:00'
* interval '1 hour' * double precision '3.5'interval '03:30'
/ interval '1 hour' / double precision '1.5'interval '00:40'

Table 9-26. ����/ʱ�亯��

�����������������������
age(timestamp, timestamp)interval��ȥ����������һ��ʹ���ꡢ�µ�"���Ż�"�Ľ��age('2001-04-10', timestamp '1957-06-13')43 years 9 mons 27 days
age(timestamp)interval��current_date��ȥ�õ�����ֵage(timestamp '1957-06-13')43 years 8 mons 3 days
current_datedate��������ڣ��� Section 9.9.4   
current_timetime with time zone���ڵ�ʱ�䣻�� Section 9.9.4   
current_timestamptimestamp with time zone���ں�ʱ�䣻�� Section 9.9.4   
date_part(text, timestamp)double precision��ȡ����(��Ч�� extract)���ּ� Section 9.9.1 date_part('hour', timestamp '2001-02-16 20:38:40')20
date_part(text, interval)double precision��ȡ����(��Ч�� extract)���ּ� Section 9.9.1 date_part('month', interval '2 years 3 months')3
date_trunc(text, timestamp)timestamp�ضϳ�ָ���ľ��ȣ��ּ�Section 9.9.2 date_trunc('hour', timestamp '2001-02-16 20:38:40')2001-02-16 20:00:00+00
extract(field from timestamp)double precision��ȡ�����ּ� Section 9.9.1 extract(hour from timestamp '2001-02-16 20:38:40')20
extract(field from interval)double precision��ȡ�����ּ� Section 9.9.1 extract(month from interval '2 years 3 months')3
isfinite(timestamp)boolean��������ʱ���(������)isfinite(timestamp '2001-02-16 21:28:30')true
isfinite(interval)boolean��������ʱ����isfinite(interval '4 hours')true
localtimetime���յ�ʱ�䣻�� Section 9.9.4   
localtimestamptimestamp���ں�ʱ�䣻�� Section 9.9.4   
now()timestamp with time zone��ǰ�����ں�ʱ��(��Ч�� current_timestamp)����Section 9.9.4   
timeofday()text��ǰ���ں�ʱ�䣻��Section 9.9.4   

������Щ�������⣬��֧�� SQL ������ OVERLAPS��

( start1, end1 ) OVERLAPS ( start2, end2 )
( start1, length1 ) OVERLAPS ( start2, length2 )

������ʽ������ʱ���������ǵ��յ㶨�壩�ص���ʱ��������ֵ�� �յ������һ�����ڣ�ʱ�䣬����ʱ�����������������һ���������һ��ʱ������ ���ڣ�ʱ�䣬ʱ�����

SELECT (DATE '2001-02-16', DATE '2001-12-21') OVERLAPS
       (DATE '2001-10-30', DATE '2002-10-30');
Result: true
SELECT (DATE '2001-02-16', INTERVAL '100 days') OVERLAPS
       (DATE '2001-10-30', DATE '2002-10-30');
Result: false

9.9.1. EXTRACT��date_part

EXTRACT (field from source)

extract ����������/ʱ����ֵ���ȡ ���򣬱��������Сʱ�ȡ�source ������һ������ timestamp��time������ interval ��ֵ���ʽ�� ������Ϊ date �ı��ʽ��ת��Ϊ timestamp�����Ҳ�����á��� field ��һ����ʶ�� �����ִ�����ָ����Դ�����г�ȡ������extract ������������Ϊdouble precision ����ֵ�� ������ֵ����Ч����������֡�

century

���͡�

SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13');
Result: 20
SELECT EXTRACT(CENTURY FROM TIMESTAMP '2001-02-16 20:38:40');
Result: 21

��һ�����ʹ� 0001-01-01 00:00:00 AD ��ʼ�� ������ʱ�����ǻ���֪�����ǵ�һ�����͡������������������ʹ�ø�����������Ĺ��ҡ� û�� 0 ���ͣ�����ֱ�Ӵӹ�Ԫǰ 1 ���͵���Ԫ 1 ���͡� �������Ϊ�����������ô��ѱ�Թ����������ʥ�˵ý��ã���ٸԣ��̻��ա�

PostgreSQL 8.0 ��ǰ�汾�ﲢ����ѭ���͵�ϰ�߱�ţ�ֻ�ǰ���ݳ��� 100��

day

(�·�)���������(1-31)

SELECT EXTRACT(DAY from TIMESTAMP '2001-02-16 20:38:40');
Result: 16
decade

��������10

SELECT EXTRACT(DECADE from TIMESTAMP '2001-02-16 20:38:40');
Result: 200
dow

ÿ�ܵ����ں�(0 - 6���������� 0) (������ timestamp)

SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40');
Result: 5

��ע�� extract �����ڼ���ź� to_char �����IJ�ͬ��

doy

һ��ĵڼ���(1 -365/366) (������ timestamp)

SELECT EXTRACT(DOY from TIMESTAMP '2001-02-16 20:38:40');
Result: 47
epoch

���� date �� timestamp ��ֵ���ԣ� ���� 1970-01-01 00:00:00 ����������(��������Ǹ�����)�� ���� interval ��ֵ���ԣ�����ʱ��������������

SELECT EXTRACT(EPOCH from TIMESTAMP '2001-02-16 20:38:40');
Result: 982352320

SELECT EXTRACT(EPOCH from INTERVAL '5 days 3 hours');
Result: 442800

�����ǰ� epoch ֵת����ʱ����ķ�����

SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 982384720 * INTERVAL '1 second';
hour

Сʱ�� (0 - 23)

SELECT EXTRACT(HOUR from TIMESTAMP '2001-02-16 20:38:40');
Result: 20
microseconds

���򣬰���С�����֣����� 1,000,000����ע��������ȫ�����롣

SELECT EXTRACT(MICROSECONDS from TIME '17:12:28.5');
Result: 28500000
millennium

ǧ�ꡣ

SELECT EXTRACT(MILLENNIUM from TIMESTAMP '2001-02-16 20:38:40');
Result: 3

20���ͣ�19xx�꣩���������ڵڶ���ǧ���������ǧ��� 2001 ��һ��һ�տ�ʼ��

PostgreSQL 8.0 ֮ǰ�İ汾������ѭǰ���ŵ�ϰ�ߣ�ֻ�Ƿ�����ݳ��� 1000��

milliseconds

���򣬰���С�����֣����� 1000����ע���������������롣

SELECT EXTRACT(MILLISECONDS from TIME '17:12:28.5');
Result: 28500
minute

������ (0 - 59)

SELECT EXTRACT(MINUTE from TIMESTAMP '2001-02-16 20:38:40');
Result: 38
month

���� timestamp ��ֵ������һ������·���(1 - 12)�� ���� interval ��ֵ�������µ���Ŀ��Ȼ��� 12 ȡģ(0 - 11)

SELECT EXTRACT(MONTH from TIMESTAMP '2001-02-16 20:38:40');
Result: 2

SELECT EXTRACT(MONTH from INTERVAL '2 years 3 months');
Result: 3

SELECT EXTRACT(MONTH from INTERVAL '2 years 13 months');
Result: 1
quarter

�������ڵĸ���ļ���(1 - 4)(������ timestamp)

SELECT EXTRACT(QUARTER from TIMESTAMP '2001-02-16 20:38:40');
Result: 1
second

���򣬰���С������ (0 - 59 [1])

SELECT EXTRACT(SECOND from TIMESTAMP '2001-02-16 20:38:40');
Result: 40

SELECT EXTRACT(SECOND from TIME '17:12:28.5');
Result: 28.5
timezone

�� UTC ��ʱ��ƫ�ƣ�����ǡ�������Ӧ UTC ���ߵ�ʱ����������Ӧ UTC ���ߵ�ʱ����

timezone_hour

ʱ��ƫ�Ƶ�Сʱ���֡�

timezone_minute

ʱ��ƫ�Ƶķ��Ӳ��֡�

week

���������ڵ�������ǵڼ��ܡ����ݶ��� (ISO 8601)�� һ��ĵ�һ�ܰ��������һ�����ա�(ISO-8601���ܴ�����һ��ʼ��) ���仰˵��һ��ĵ�һ���������ڵ�һ�ܡ���ֻ���� timestamp ��ֵ����

SELECT EXTRACT(WEEK from TIMESTAMP '2001-02-16 20:38:40');
Result: 7
year

�����Ҫ��ס����û�� 0 AD�����Դ� AD �����ȡ BC ��Ӧ��С��Щ��

SELECT EXTRACT(YEAR from TIMESTAMP '2001-02-16 20:38:40');
Result: 2001

extract ������Ҫ����;���������á� ����������ʾ������/ʱ����ֵ��ʽ�������� Section 9.8��

date_part �������ڴ�ͳ�� Ingres �����Ļ�����������(�� ������Ч�� SQL ��׼���� extract)��

date_part('field', source)

��ע������� field ���������� һ���ִ�ֵ��������һ�����֡���Ч�� date_part ������ ������ extract ����һ���ġ�

SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40');
Result: 16

SELECT date_part('hour', INTERVAL '4 hours 3 minutes');
Result: 4

9.9.2. date_trunc

date_trunc �����ڸ����Ϻ����� ���ֵ� trunc �������ơ�

date_trunc('field', source)

source ������ timestamp ��ֵ���ʽ(���� date �� time ����ֵ���ֱ��Զ�ת����timestamp����interval)�� �� field ѡ��Ը�ʱ�����ֵ ѡ��ʲô���ľ��Ƚ��нض�)�� ���ص���ֵ�� timestamp ���ͻ���interval������С��ѡ���� ���ȵ�������Ϊ��(����һ����������ں��·���Ļ�)��

field ����Ч��ֵ�ǡ�

microseconds
milliseconds
second
minute
hour
day
week
month
year
decade
century
millennium

���ӣ�

SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40');
Result: 2001-02-16 20:00:00+00

SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40');
Result: 2001-01-01 00:00:00+00

9.9.3. AT TIME ZONE

AT TIME ZONE ���������ʱ���ת���ɲ�ͬ�� ʱ����Table 9-27 ��ʾ������塣

Table 9-27. AT TIME ZONE����

���ʽ������������
timestamp without time zone AT TIME ZONE zone timestamp with time zone�Ѹ���ʱ���ĵ���ʱ��ת���� UTC
timestamp with time zone AT TIME ZONE zone timestamp without time zone�� UTC ת���ɸ���ʱ���ĵ���ʱ��
time with time zone AT TIME ZONE zone time with time zone��ʱ��֮��ת������ʱ��

����Щ���ʽ�������Ҫ�� zone ��������Ϊ �ı��������磬'PST'������һ��ʱ���� �����磬INTERVAL '-08:00'���� ���ı�������£����õ�ʱ�������� Table B-4 ����ʾ�� ������֧�ָ�ͨ�õ� Table B-6 �����Щ������Ŀǰ��Щ��û��ʵ�֡���

���ӣ����豾��ʱ���� PST8PDT����

SELECT TIMESTAMP '2001-02-16 20:38:40' AT TIME ZONE 'MST';
Result: 2001-02-16 19:38:40-08

SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'MST';
Result: 2001-02-16 18:38:40

��һ�����ӽ���һ����ʱ����ʱ���Ȼ��������ͳ� MST ʱ�䣨UTC-7�� ���� UTC ʱ�����Ȼ�����ʱ��ת��Ϊ PST��UTC-8������ʾ�� �ڶ������ӽ���һ������Ϊ EST��UTC-5����ʱ�����Ȼ����� ת���� MST��UTC-7���ĵ���ʱ�䡣

����timezone(zone, timestamp) ��Ч�� SQL ���ݵĹ���timestamp AT TIME ZONE zone��

9.9.4. ��ǰ����/ʱ��

���ǿ���ʹ������ĺ�����ȡ��ǰ�����ں�/��ʱ���

CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_TIME ( precision )
CURRENT_TIMESTAMP ( precision )
LOCALTIME
LOCALTIMESTAMP
LOCALTIME ( precision )
LOCALTIMESTAMP ( precision )

CURRENT_TIME �� CURRENT_TIMESTAMP ����ʱ��ֵ�� LOCALTIME �� LOCALTIMESTAMP ����ֵû��ʱ��ֵ��

CURRENT_TIME �� CURRENT_TIMESTAMP�� LOCALTIME �� LOCALTIMESTAMP ������ѡ��ظ���һ�����Ȳ����� �þ��ȵ��½����������԰��Ϊָ��С��λ�����û�о��Ȳ����� ���������ܵõ���ȫ�����ȡ�

ע��: �� PostgreSQL 7.2 ֮ǰû��ʵ�־��Ȳ����� ������Ǹ����������롣

һЩ���ӣ�

SELECT CURRENT_TIME;
Result: 14:39:53.662522-05

SELECT CURRENT_DATE;
Result: 2001-12-23

SELECT CURRENT_TIMESTAMP;
Result: 2001-12-23 14:39:53.662522-05

SELECT CURRENT_TIMESTAMP(2);
Result: 2001-12-23 14:39:53.66-05

SELECT LOCALTIMESTAMP;
Result: 2001-12-23 14:39:53.662522

���� now() �Ǵ�ͳ�� PostgreSQL �� CURRENT_TIMESTAMP �ĵ�Ч�

����һ�� timeofday() ������������ʷԭ�� ������һ���ִ��������� timestamp ֵ��

SELECT timeofday();
Result: Sat Feb 17 19:07:32.000126 2001 EST

����һ�������Ѵ�ң��Ǿ��� CURRENT_TIMESTAMP ����صĺ�����ʱ�䵱����ǰ����Ŀ�ʼ���أ����������е�ʱ�� ���ǵ���ֵ�����ı䡣 ������Ϊ����һ�����ԣ�Ŀ����Ϊ������һ��������"��ǰ" ʱ����������ĸ��������ͬһ��������ö���޸Ŀ�����ͬ����ʱ����� �� timeofday() ���ص�ǰ��ʵ��ʱ�䣬������������Ĵ����ǰ����

ע��: ����������ݿ�ϵͳ��Ƶ���ظ�����Щ��ֵ��

��������/ʱ�����ͻ�����������ı�ֵ now�� ����������ǰ�����ں�ʱ�䡣��ˣ�����������������ͬ�Ľ����

SELECT CURRENT_TIMESTAMP;
SELECT now();
SELECT TIMESTAMP 'now';

��ʾ: �ڴ���������һ��DEFAULTֵ��ʱ�����Dz������õ�������ʽ�ġ� ��Ϊϵͳ���ڷ������������ʱ��� now ת���� һ�� timestamp���������Ҫȱʡֵ��ʱ�� �ͻ�ʹ�ô������ʱ��! ��ͷ������ʽҪ��ʵ��ʹ��ȱʡֵ��ʱ��ż��㣬 ��Ϊ�����Ǻ������á�������ǿ��Ը�������ʱ���е�ʱ�� ��Ҫ��ȱʡ��Ϊ��

Notes

[1]

�������ϵͳʵ�������룬 ��ô������ 60