日期/时间/时间戳类型

日期类型

神通数据库中支持的日期类型如下表:

表26神通数据库支持的日期类型

类型 描述 存储 最早 最晚 精确度
DATE 日期类型 8 字节 4714-11-24 00:00:00 BC 9999-12-31 23:59:59 AD 1 秒

神通数据库中日期型常量由关键词DATE标识,后接一个由单引号括起的日期字符串。

  • 输入格式

输入日期串的年、月、日域的顺序由配置参数DateOrder决定。DateOrder有三种可选值,分别为YMD(代表ISO格式)、DMY(代表EURO格式)和MDY(代表NONEURO或者US格式)。默认输入格式为YMD。例如当DateOrder为YMD时,串'2009-1-8'表示日期2009年1月8日。当DateOrder为DMY时,串'1-8-2009'表示日期2009年8月1日。当DateOrder为MDY时,串'1-8-2009'表示日期2009年1月8日。

神通数据库支持的日期类型输入方式如下表:

表27神通数据库支持的日期类型输入方式

例子 描述
Jan 8,1999 在MDY格式下表示公元1999年1月8日,其他格式下报错。
1999-01-08 在YMD格式下表示公元1999年1月8日,其他格式下报错。
01-08-99 BC 在DMY格式下表示公元前99年8月1日,在MDY格式下表示公元前99年1月8日,在YMD格式下报错。
1/8/12 在DMY格式下表示公元2012年8月1日,在MDY格式下表示公元2012年1月8日,在YMD格式下表示公元2001年8月12号。
19990108 在YMD格式下表示公元1999年1月8日,其他格式下报错。
1/18/1999 在MDY格式下表示公元1999年1月18日,其他格式下报错
990108 在YMD格式下表示公元1999年1月8日,其他格式下报错。
1999.008 在任何模式下都表示1999年里的第8天
J2451187 Julian day,在任何格式下都是同一天。
January 8, 99 BC 在MDY格式下表示公元前99年1月8日,其他格式下报错
08-Jan-50 在DMY格式下表示公元2050年1月8日,其他格式下报错。

示例1: 查看日期输入格式对 DATE 类型的影响

--  查看日期输入格式对 DATE 类型的影响
--  设置日期输入格式
SET DATEORDER = 'YMD';


SELECT '1-2-3'::DATE;
DATE(date)      |
----------------
2001-02-03      |
总数目:1


--  设置日期输入格式
SET DATEORDER = 'MDY';


SELECT '1-2-3'::DATE;
DATE(date)      |
----------------
2003-01-02      |
总数目:1


--  设置日期输入格式
SET DATEORDER = 'DMY';


SELECT '1-2-3'::DATE;
DATE(date)      |
----------------
2003-02-01      |
总数目:1

--  重置参数
RESET DATEORDER;

神通数据库提供了SQL92兼容的函数CURRENT_DATE,它可以直接用于日期类型数据的输入。

示例2: 使用 CURRENT_DATE

SELECT CURRENT_DATE;

--  结果如下
 CURRENT_DATE
--------------
 2015-04-07
(1 row)

另外,为了方便,还支持下表中的特殊值,需要用单引号括起来,并强制转换成日期类型。

表28神通数据库支持的特殊值

特殊值 描述 举例
infinity 在任何格式下都表示日期的极大值。 select ' infinity '::date;
-infinity 在任何格式下都表示日期的极小值。 select ' -infinity '::date;
epoch 在任何格式下都表示公元1970年1月1日(UNIX系统零时). select ' epoch '::date;
now 在任何格式下都表示当前系统的日期 select ' now '::date;
today 同now. select ' today '::date;
tomorrow now的后一天。 select 'tomorrow'::date;
yesterday now的前一天。 select 'yesterday'::date;
  • 输出格式

日期的输出格式由配置参数DateStyle决定。配置参数DateStyle有三种可选值,分别为YMD(代表ISO格式)、DMY(代表EURO格式)和MDY(代表NONEURO或者US格式),表示日期的输出格式。默认输出格式为YMD。不管以何种格式输出,输出的年份都以四位数字表示,月和日都以二位数字表示。例如公元1998年1月8日和公元前267年9月2日在不同格式下显示出来的结果如下:

YMD格式------1998-01-08和 0267-09-02 BC

DMY格式------08.01.1998 和 02.09.0267 BC

MDY格式------01/08/1998 和 09/02/0267 BC

示例3: 查看日期输出格式对 DATE 类型的影响

--  查看日期输出格式对 DATE 类型的影响
--  设置日期输出格式
SET DATESTYLE = 'YMD';


SELECT '2001-2-3'::DATE;
DATE(date)      |
----------------
2001-02-03      |
总数目:1


--  设置日期输出格式
SET DATESTYLE = 'MDY';


SELECT '2001-2-3'::DATE;
DATE(date)      |
----------------
2001-02-03      |
总数目:1


--  设置日期输出格式
SET DATESTYLE = 'DMY';


SELECT '2001-2-3'::DATE;
DATE(date)      |
----------------
2001-02-03      |
总数目:1

--  重置参数
RESET DATESTYLE;

注解

DateStyle与DateOrder虽然可选值是一样的,但是却有着不同的作用。 DateStyle标记的是DATE类型的输出格式,而DateOrder标记的是DATE类型的输入格式,作用域不同并且互不干扰。

  • 带有时间信息的输入、输出格式

带有时间信息的输入、输出格式由配置参数DATEFORMAT决定。

DATEFORMAT 默认值为'',表示DATE类型不带有时间信息;其他值(DATETIME格式模型),比如'YYYY-MM-DD HH24:MI:SS',则表示DATE类型带有时间信息。

示例4: 查看带有时间信息的输入、输出格式对 DATE 类型的影响

--  清理环境
DROP TABLE tab1 CASCADE;


--  设置参数
SET DATEORDER = 'YMD';
SET DATESTYLE = 'YMD';
SET DATEFORMAT = '';


--  创建包含 DATE 列的表
CREATE TABLE tab1(a INT, b DATE);

--  插入不带时间信息的DATE数据,成功
INSERT INTO tab1 VALUES(1, '1999-12-31');

--  插入不带时间信息的DATE数据,成功
INSERT INTO tab1 VALUES(2, '1999-12-31 00:00:00');
INSERT INTO tab1 VALUES(3, '1999-12-31 12:13:14');


--  查看 DATE 类型数据,不带时间信息
SELECT * FROM tab1 ORDER BY a;
A(int)      |B(date)      |
-------------------------
1           |1999-12-31   |
-------------------------
2           |1999-12-31   |
-------------------------
3           |1999-12-31   |
总数目:3


--  设置带有时间信息的DATE类型输入、输出格式
SET DATEFORMAT = 'YYYY-MM-DD HH24:MI:SS';



--  查看 DATE 类型数据,带有时间信息
SELECT a, b::text FROM tab1 ORDER BY a;
A(int)      |B(text)      |
-------------------------
1           |1999-12-31 00|
            |:00:00       |
-------------------------
2           |1999-12-31 00|
            |:00:00       |
-------------------------
3           |1999-12-31 12|
            |:13:14       |
总数目:3


--  清理环境
DROP TABLE tab1;

--  重置参数
RESET DATEFORMAT;
RESET DATEORDER;
RESET DATESTYLE;

注解

神通数据库会优先使用DATEFORMAT参数(忽略DateStyle与DateOrder)用于控制DATE类型的输入、输出格式。
如果DATE串中不含时间信息,则时间默认为00:00:00。

时间类型

神通数据库中提供的时间类型如下表:

表29神通数据库支持的时间类型

类型 描述 存储 最早 最晚 精确度
TIME[(p)] 时间类型,只用于一日内时间 8 字节 00:00:00 23:59:59.999999 1微秒

神通数据库的TIME[(p)]类型接受一个可选的精度值 p,这个精度值声明了秒域小数点之后可以保留的最大位数。取值范围是[0,6],即最大可精确到微秒。如果不指定p的值,则默认为用户输入的精度,但最大不超过6。当p被指定为1到5时,如果输入的小数位数超过p位,则根据p+1位的值四舍五入至p位,当p被指定为6或者不被指定时,如果输入的小数位数超出6位,则超出部分直接截断。

神通数据库中时间型常量由关键词TIME标识,后接一个由单引号括起的格式为"时:分:秒"的时间字符串, 单引号应看作是时间串的一部分不能缺少。如:TIME '11:20:45'

下表中列出了神通数据库支持的时间输入格式:

表210神通数据库支持的时间输入格式

例子 描述
06:AM 等价于06:00:00.
04:05:06.789 标准格式。
04:05:06 标准格式。
04:05 标准格式,等价于04:05:00.
040506 标准格式,等价于04:05:06.
04:05 AM 等价于04:05:00.输入小时数必须在[1,12]内
04:05 PM 等价于16:05:00.输入小时数必须在[1,12]内
allballs 含义同00:00:00

下表中列出了神通数据库12小时制和24小时制的时间对应关系:

表211神通数据库12小时制和24小时制的时间对应关系

12小时制 24小时制
01:00:00 AM到11:59:59.999999 AM 01:00:00到11:59:59.999999
12:00:00 AM到12:59:59.999999 AM 00:00:00到00:59:59.999999
01:00:00 PM到11:59:59.999999 PM 13:00:00到23:59:59.999999
12:00:00 PM到12:59:59.999999 PM 12:00:00到12:59:59.999999

示例4: 使用时间类型

DROP TABLE tab1 CASCADE;
CREATE TABLE tab1(a TIME);

--  插入时间类型
INSERT INTO tab1 VALUES('04:05:06.789');
INSERT INTO tab1 VALUES('04:05:06');
INSERT INTO tab1 VALUES('04:05 AM');
INSERT INTO tab1 VALUES('04:05 PM');
INSERT INTO tab1 VALUES('ALLBALLS');



--  查看时间类型
SELECT * FROM tab1 ORDER BY a;
A(time)      |
-------------
00:00:00     |
-------------
04:05:00     |
-------------
04:05:06     |
-------------
04:05:06.789 |
-------------
16:05:00     |
总数目:5


--  删除表
DROP TABLE tab1;

神通数据库提供了SQL兼容的时间函数 CURRENT_TIME ,可以用于时间类型数据的输入。如:

示例5: 使用 CURRENT_TIME

SELECT CURRENT_TIME;

--  结果如下
       NOW
-----------------
 15:42:35.702388
(1 row)

另外,为了方便,神通数据库还支持下表中的特殊值,但这些值需要用单引号括起来,并强制转换成时间类型。

表212神通数据库支持的特殊值

特殊值 描述 举例
now 当前事务时间 select 'now'::time;
  • 输入格式

TIME类型的输入格式为:

hour:[minute[:second[.microsecond]]] [AM/PM],其中AM和PM不区分大小写。对于可缺省的部分默认为0。

  • 输出格式

TIME类型的输出格式为:

hour:minute:second[.microsecond],小时采用的是24小时制。microsecond输出的位数由存储数据本身决定,但最多不超过6位。

带时区时间类型

表213神通数据库支持的带时间区时间类型

类型 描述 存储
TIME[(p)] WITH TIME ZONE 带时区时间类型 12字节

TIME WITH TIME ZONE类型时间部分的表示范围以及精度同TIME类型,时区部分的表示范围是[-12:59,+14:00],精度为1分钟。

  • 输入格式

TIME WITH TIME ZONE类型由时间和时区两部分组成,时间串的输入格式同TIME类型的输入格式,时区可以不输入,如果不输入则默认为服务器系统时区。如果时区信息存在,则最多有一个,多了会报错。时区串的位置与时间串的位置可以互换,所表示的时间是一样的。例如'1:2:3 -07:00'与'-07:00 1:2:3'表示同一个时间。时区串、时间串和日期串之间建议使用空格分隔,否则可能会出现一些无法预料的问题。

时区有三种输入方式:

通过时间偏移来指定时区,即+/-tz_hour[:tz_minute]。采取这种方式输入时区时+/-不可省略,小时域不可缺省,分钟域可缺省,缺省默认为0。tz_hour的范围是[-12,14],tz_minute的范围是[0,59]。输入格式举例如下表:

表214神通数据库的时间偏移时区输入格式

例子 描述
+9 比格林威治时间快9小时,+9表示东9区。
-9 比格林威治时间慢9小时,-9表示西9区。
+9:05 比格林威治时间快9小时5分。
-08:59 比格林威治时间慢8小时59分。

通过地理地名来指定时区,即tzname。OSCAR支持的地理地名、地名对应的时间偏移及此地理名代表的时区是否是夏令时如下表所示:

表215神通数据库支持的时区地理地名对应的时间偏移

name utc_offset is_dst
Africa/Abidjan 00:00 f
Africa/Accra 00:00 f
Africa/Addis_Ababa 03:00 f
Africa/Algiers 01:00 f
Africa/Asmara 03:00 f
Africa/Asmera 03:00 f
Africa/Bamako 00:00 f
Africa/Bangui 01:00 f
Africa/Banjul 00:00 f
Africa/Bissau 00:00 f
Africa/Blantyre 02:00 f
Africa/Brazzaville 01:00 f
Africa/Bujumbura 02:00 f
Africa/Cairo 02:00 f
Africa/Casablanca 00:00 f
Africa/Ceuta 01:00 f
Africa/Conakry 00:00 f
Africa/Dakar 00:00 f
Africa/Dar_es_Salaam 03:00 f
Africa/Djibouti 03:00 f
Africa/Douala 01:00 f
Africa/El_Aaiun 00:00 f
Africa/Freetown 00:00 f
Africa/Gaborone 02:00 f
Africa/Harare 02:00 f
Africa/Johannesburg 02:00 f
Africa/Kampala 03:00 f
Africa/Khartoum 03:00 f
Africa/Kigali 02:00 f
Africa/Kinshasa 01:00 f
Africa/Lagos 01:00 f
Africa/Libreville 01:00 f
Africa/Lome 00:00 f
Africa/Luanda 01:00 f
Africa/Lubumbashi 02:00 f
Africa/Lusaka 02:00 f
Africa/Malabo 01:00 f
Africa/Maputo 02:00 f
Africa/Maseru 02:00 f
Africa/Mbabane 02:00 f
Africa/Mogadishu 03:00 f
Africa/Monrovia 00:00 f
Africa/Nairobi 03:00 f
Africa/Ndjamena 01:00 f
Africa/Niamey 01:00 f
Africa/Nouakchott 00:00 f
Africa/Ouagadougou 00:00 f
Africa/Porto-Novo 01:00 f
Africa/Sao_Tome 00:00 f
Africa/Timbuktu 00:00 f
Africa/Tripoli 02:00 f
Africa/Tunis 01:00 f
Africa/Windhoek 02:00 t
America/Adak -10:00 f
America/Anchorage -09:00 f
America/Anguilla -04:00 f
America/Antigua -04:00 f
America/Araguaina -03:00 f
America/Argentina/Buenos_Aires -03:00 f
America/Argentina/Catamarca -03:00 f
America/Argentina/ComodRivadavia -03:00 f
America/Argentina/Cordoba -03:00 f
America/Argentina/Jujuy -03:00 f
America/Argentina/La_Rioja -03:00 f
America/Argentina/Mendoza -03:00 f
America/Argentina/Rio_Gallegos -03:00 f
America/Argentina/Salta -03:00 f
America/Argentina/San_Juan -03:00 f
America/Argentina/San_Luis -03:00 t
America/Argentina/Tucuman -03:00 f
America/Argentina/Ushuaia -03:00 f
America/Aruba -04:00 f
America/Asuncion -03:00 t
America/Atikokan -05:00 f
America/Atka -10:00 f
America/Bahia -03:00 f
America/Barbados -04:00 f
America/Belem -03:00 f
America/Belize -06:00 f
America/Blanc-Sablon -04:00 f
America/Boa_Vista -04:00 f
America/Bogota -05:00 f
America/Boise -07:00 f
America/Buenos_Aires -03:00 f
America/Cambridge_Bay -07:00 f
America/Campo_Grande -04:00 f
America/Cancun -06:00 f
America/Caracas -04:30 f
America/Catamarca -03:00 f
America/Cayenne -03:00 f
America/Cayman -05:00 f
America/Chicago -06:00 f
America/Chihuahua -07:00 f
America/Coral_Harbour -05:00 f
America/Cordoba -03:00 f
America/Costa_Rica -06:00 f
America/Cuiaba -04:00 f
America/Curacao -04:00 f
America/Danmarkshavn 00:00 f
America/Dawson -08:00 f
America/Dawson_Creek -07:00 f
America/Denver -07:00 f
America/Detroit -05:00 f
America/Dominica -04:00 f
America/Edmonton -07:00 f
America/Eirunepe -04:00 f
America/El_Salvador -06:00 f
America/Ensenada -08:00 f
America/Fort_Wayne -05:00 f
America/Fortaleza -03:00 f
America/Glace_Bay -04:00 f
America/Godthab -03:00 f
America/Goose_Bay -04:00 f
America/Grand_Turk -05:00 f
America/Grenada -04:00 f
America/Guadeloupe -04:00 f
America/Guatemala -06:00 f
America/Guayaquil -05:00 f
America/Guyana -04:00 f
America/Halifax -04:00 f
America/Havana -05:00 f
America/Hermosillo -07:00 f
America/Indiana/Indianapolis -05:00 f
America/Indiana/Knox -06:00 f
America/Indiana/Marengo -05:00 f
America/Indiana/Petersburg -05:00 f
America/Indiana/Tell_City -06:00 f
America/Indiana/Vevay -05:00 f
America/Indiana/Vincennes -05:00 f
America/Indiana/Winamac -05:00 f
America/Indianapolis -05:00 f
America/Inuvik -07:00 f
America/Iqaluit -05:00 f
America/Jamaica -05:00 f
America/Jujuy -03:00 f
America/Juneau -09:00 f
America/Kentucky/Louisville -05:00 f
America/Kentucky/Monticello -05:00 f
America/Knox_IN -06:00 f
America/La_Paz -04:00 f
America/Lima -05:00 f
America/Los_Angeles -08:00 f
America/Louisville -05:00 f
America/Maceio -03:00 f
America/Managua -06:00 f
America/Manaus -04:00 f
America/Marigot -04:00 f
America/Martinique -04:00 f
America/Mazatlan -07:00 f
America/Mendoza -03:00 f
America/Menominee -06:00 f
America/Merida -06:00 f
America/Mexico_City -06:00 f
America/Miquelon -03:00 f
America/Moncton -04:00 f
America/Monterrey -06:00 f
America/Montevideo -02:00 t
America/Montreal -05:00 f
America/Montserrat -04:00 f
America/Nassau -05:00 f
America/New_York -05:00 f
America/Nipigon -05:00 f
America/Nome -09:00 f
America/Noronha -02:00 f
America/North_Dakota/Center -06:00 f
America/North_Dakota/New_Salem -06:00 f
America/Panama -05:00 f
America/Pangnirtung -05:00 f
America/Paramaribo -03:00 f
America/Phoenix -07:00 f
America/Port-au-Prince -05:00 f
America/Port_of_Spain -04:00 f
America/Porto_Acre -04:00 f
America/Porto_Velho -04:00 f
America/Puerto_Rico -04:00 f
America/Rainy_River -06:00 f
America/Rankin_Inlet -06:00 f
America/Recife -03:00 f
America/Regina -06:00 f
America/Resolute -05:00 f
America/Rio_Branco -04:00 f
America/Rosario -03:00 f
America/Santarem -03:00 f
America/Santiago -03:00 t
America/Santo_Domingo -04:00 f
America/Sao_Paulo -03:00 f
America/Scoresbysund -01:00 f
America/Shiprock -07:00 f
America/St_Barthelemy -04:00 f
America/St_Johns -03:30 f
America/St_Kitts -04:00 f
America/St_Lucia -04:00 f
America/St_Thomas -04:00 f
America/St_Vincent -04:00 f
America/Swift_Current -06:00 f
America/Tegucigalpa -06:00 f
America/Thule -04:00 f
America/Thunder_Bay -05:00 f
America/Tijuana -08:00 f
America/Toronto -05:00 f
America/Tortola -04:00 f
America/Vancouver -08:00 f
America/Virgin -04:00 f
America/Whitehorse -08:00 f
America/Winnipeg -06:00 f
America/Yakutat -09:00 f
America/Yellowknife -07:00 f
Antarctica/Casey 11:00 f
Antarctica/Davis 05:00 f
Antarctica/DumontDUrville 10:00 f
Antarctica/Mawson 05:00 f
Antarctica/McMurdo 13:00 t
Antarctica/Palmer -03:00 t
Antarctica/Rothera -03:00 f
Antarctica/South_Pole 13:00 t
Antarctica/Syowa 03:00 f
Antarctica/Vostok 06:00 f
Arctic/Longyearbyen 01:00 f
Asia/Aden 03:00 f
Asia/Almaty 06:00 f
Asia/Amman 02:00 f
Asia/Anadyr 12:00 f
Asia/Aqtau 05:00 f
Asia/Aqtobe 05:00 f
Asia/Ashgabat 05:00 f
Asia/Ashkhabad 05:00 f
Asia/Baghdad 03:00 f
Asia/Bahrain 03:00 f
Asia/Baku 04:00 f
Asia/Bangkok 07:00 f
Asia/Beirut 02:00 f
Asia/Bishkek 06:00 f
Asia/Brunei 08:00 f
Asia/Calcutta 05:30 f
Asia/Choibalsan 08:00 f
Asia/Chongqing 08:00 f
Asia/Chungking 08:00 f
Asia/Colombo 05:30 f
Asia/Dacca 07:00 t
Asia/Damascus 02:00 f
Asia/Dhaka 07:00 t
Asia/Dili 09:00 f
Asia/Dubai 04:00 f
Asia/Dushanbe 05:00 f
Asia/Gaza 02:00 f
Asia/Harbin 08:00 f
Asia/Ho_Chi_Minh 07:00 f
Asia/Hong_Kong 08:00 f
Asia/Hovd 07:00 f
Asia/Irkutsk 08:00 f
Asia/Istanbul 02:00 f
Asia/Jakarta 07:00 f
Asia/Jayapura 09:00 f
Asia/Jerusalem 02:00 f
Asia/Kabul 04:30 f
Asia/Kamchatka 12:00 f
Asia/Karachi 05:00 f
Asia/Kashgar 08:00 f
Asia/Kathmandu 05:45 f
Asia/Katmandu 05:45 f
Asia/Kolkata 05:30 f
Asia/Krasnoyarsk 07:00 f
Asia/Kuala_Lumpur 08:00 f
Asia/Kuching 08:00 f
Asia/Kuwait 03:00 f
Asia/Macao 08:00 f
Asia/Macau 08:00 f
Asia/Magadan 11:00 f
Asia/Makassar 08:00 f
Asia/Manila 08:00 f
Asia/Muscat 04:00 f
Asia/Nicosia 02:00 f
Asia/Novokuznetsk 07:00 f
Asia/Novosibirsk 06:00 f
Asia/Omsk 06:00 f
Asia/Oral 05:00 f
Asia/Phnom_Penh 07:00 f
Asia/Pontianak 07:00 f
Asia/Pyongyang 09:00 f
Asia/Qatar 03:00 f
Asia/Qyzylorda 06:00 f
Asia/Rangoon 06:30 f
Asia/Riyadh 03:00 f
Asia/Saigon 07:00 f
Asia/Sakhalin 10:00 f
Asia/Samarkand 05:00 f
Asia/Seoul 09:00 f
Asia/Shanghai 08:00 f
Asia/Singapore 08:00 f
Asia/Taipei 08:00 f
Asia/Tashkent 05:00 f
Asia/Tbilisi 04:00 f
Asia/Tehran 03:30 f
Asia/Tel_Aviv 02:00 f
Asia/Thimbu 06:00 f
Asia/Thimphu 06:00 f
Asia/Tokyo 09:00 f
Asia/Ujung_Pandang 08:00 f
Asia/Ulaanbaatar 08:00 f
Asia/Ulan_Bator 08:00 f
Asia/Urumqi 08:00 f
Asia/Vientiane 07:00 f
Asia/Vladivostok 10:00 f
Asia/Yakutsk 09:00 f
Asia/Yekaterinburg 05:00 f
Asia/Yerevan 04:00 f
Atlantic/Azores -01:00 f
Atlantic/Bermuda -04:00 f
Atlantic/Canary 00:00 f
Atlantic/Cape_Verde -01:00 f
Atlantic/Faeroe 00:00 f
Atlantic/Faroe 00:00 f
Atlantic/Jan_Mayen 01:00 f
Atlantic/Madeira 00:00 f
Atlantic/Reykjavik 00:00 f
Atlantic/South_Georgia -02:00 f
Atlantic/St_Helena 00:00 f
Atlantic/Stanley -03:00 t
Australia/ACT 11:00 t
Australia/Adelaide 10:30 t
Australia/Brisbane 10:00 f
Australia/Broken_Hill 10:30 t
Australia/Canberra 11:00 t
Australia/Currie 11:00 t
Australia/Darwin 09:30 f
Australia/Eucla 08:45 f
Australia/Hobart 11:00 t
Australia/LHI 11:00 t
Australia/Lindeman 10:00 f
Australia/Lord_Howe 11:00 t
Australia/Melbourne 11:00 t
Australia/North 09:30 f
Australia/NSW 11:00 t
Australia/Perth 08:00 f
Australia/Queensland 10:00 f
Australia/South 10:30 t
Australia/Sydney 11:00 t
Australia/Tasmania 11:00 t
Australia/Victoria 11:00 t
Australia/West 08:00 f
Australia/Yancowinna 10:30 t
Brazil/Acre -04:00 f
Brazil/DeNoronha -02:00 f
Brazil/East -03:00 f
Brazil/West -04:00 f
Canada/Atlantic -04:00 f
Canada/Central -06:00 f
Canada/East-Saskatchewan -06:00 f
Canada/Eastern -05:00 f
Canada/Mountain -07:00 f
Canada/Newfoundland -03:30 f
Canada/Pacific -08:00 f
Canada/Saskatchewan -06:00 f
Canada/Yukon -08:00 f
CET 01:00 f
Chile/Continental -03:00 t
Chile/EasterIsland -05:00 t
CST6CDT -06:00 f
Cuba -05:00 f
EET 02:00 f
Egypt 02:00 f
Eire 00:00 f
EST -05:00 f
EST5EDT -05:00 f
Etc/GMT 00:00 f
Etc/GMT-0 00:00 f
Etc/GMT-1 01:00 f
Etc/GMT-10 10:00 f
Etc/GMT-11 11:00 f
Etc/GMT-12 12:00 f
Etc/GMT-13 13:00 f
Etc/GMT-14 14:00 f
Etc/GMT-2 02:00 f
Etc/GMT-3 03:00 f
Etc/GMT-4 04:00 f
Etc/GMT-5 05:00 f
Etc/GMT-6 06:00 f
Etc/GMT-7 07:00 f
Etc/GMT-8 08:00 f
Etc/GMT-9 09:00 f
Etc/GMT+0 00:00 f
Etc/GMT+1 -01:00 f
Etc/GMT+10 -10:00 f
Etc/GMT+11 -11:00 f
Etc/GMT+12 -12:00 f
Etc/GMT+2 -02:00 f
Etc/GMT+3 -03:00 f
Etc/GMT+4 -04:00 f
Etc/GMT+5 -05:00 f
Etc/GMT+6 -06:00 f
Etc/GMT+7 -07:00 f
Etc/GMT+8 -08:00 f
Etc/GMT+9 -09:00 f
Etc/GMT0 00:00 f
Etc/Greenwich 00:00 f
Etc/UCT 00:00 f
Etc/Universal 00:00 f
Etc/UTC 00:00 f
Etc/Zulu 00:00 f
Europe/Amsterdam 01:00 f
Europe/Andorra 01:00 f
Europe/Athens 02:00 f
Europe/Belfast 00:00 f
Europe/Belgrade 01:00 f
Europe/Berlin 01:00 f
Europe/Bratislava 01:00 f
Europe/Brussels 01:00 f
Europe/Bucharest 02:00 f
Europe/Budapest 01:00 f
Europe/Chisinau 02:00 f
Europe/Copenhagen 01:00 f
Europe/Dublin 00:00 f
Europe/Gibraltar 01:00 f
Europe/Guernsey 00:00 f
Europe/Helsinki 02:00 f
Europe/Isle_of_Man 00:00 f
Europe/Istanbul 02:00 f
Europe/Jersey 00:00 f
Europe/Kaliningrad 02:00 f
Europe/Kiev 02:00 f
Europe/Lisbon 00:00 f
Europe/Ljubljana 01:00 f
Europe/London 00:00 f
Europe/Luxembourg 01:00 f
Europe/Madrid 01:00 f
Europe/Malta 01:00 f
Europe/Mariehamn 02:00 f
Europe/Minsk 02:00 f
Europe/Monaco 01:00 f
Europe/Moscow 03:00 f
Europe/Nicosia 02:00 f
Europe/Oslo 01:00 f
Europe/Paris 01:00 f
Europe/Podgorica 01:00 f
Europe/Prague 01:00 f
Europe/Riga 02:00 f
Europe/Rome 01:00 f
Europe/Samara 04:00 f
Europe/San_Marino 01:00 f
Europe/Sarajevo 01:00 f
Europe/Simferopol 02:00 f
Europe/Skopje 01:00 f
Europe/Sofia 02:00 f
Europe/Stockholm 01:00 f
Europe/Tallinn 02:00 f
Europe/Tirane 01:00 f
Europe/Tiraspol 02:00 f
Europe/Uzhgorod 02:00 f
Europe/Vaduz 01:00 f
Europe/Vatican 01:00 f
Europe/Vienna 01:00 f
Europe/Vilnius 02:00 f
Europe/Volgograd 03:00 f
Europe/Warsaw 01:00 f
Europe/Zagreb 01:00 f
Europe/Zaporozhye 02:00 f
Europe/Zurich 01:00 f
GB 00:00 f
GB-Eire 00:00 f
GMT 00:00 f
GMT-0 00:00 f
GMT-1 01:00 f
GMT-2 02:00 f
GMT-3 03:00 f
GMT-4 04:00 f
GMT-5 05:00 f
GMT-6 06:00 f
GMT-7 07:00 f
GMT-8 08:00 f
GMT-9 09:00 f
GMT-10 10:00 f
GMT-11 11:00 f
GMT-12 12:00 f
GMT-13 13:00 f
GMT-14 14:00 f
GMT+0 00:00 f
GMT+1 -01:00 f
GMT+2 -02:00 f
GMT+3 -03:00 f
GMT+4 -04:00 f
GMT+5 -05:00 f
GMT+6 -06:00 f
GMT+7 -07:00 f
GMT+8 -08:00 f
GMT+9 -09:00 f
GMT+10 -10:00 f
GMT+11 -11:00 f
GMT+12 -12:00 f
GMT0 00:00 f
Greenwich 00:00 f
Hongkong 08:00 f
HST -10:00 f
Iceland 00:00 f
Indian/Antananarivo 03:00 f
Indian/Chagos 06:00 f
Indian/Christmas 07:00 f
Indian/Cocos 06:30 f
Indian/Comoro 03:00 f
Indian/Kerguelen 05:00 f
Indian/Mahe 04:00 f
Indian/Maldives 05:00 f
Indian/Mauritius 04:00 f
Indian/Mayotte 03:00 f
Indian/Reunion 04:00 f
Iran 03:30 f
Israel 02:00 f
Jamaica -05:00 f
Japan 09:00 f
Kwajalein 12:00 f
Libya 02:00 f
MET 01:00 f
Mexico/BajaNorte -08:00 f
Mexico/BajaSur -07:00 f
Mexico/General -06:00 f
MST -07:00 f
MST7MDT -07:00 f
Navajo -07:00 f
NZ 13:00 t
NZ-CHAT 13:45 t
Pacific/Apia -10:00 t
Pacific/Auckland 13:00 t
Pacific/Chatham 13:45 t
Pacific/Easter -05:00 t
Pacific/Efate 11:00 f
Pacific/Enderbury 13:00 f
Pacific/Fakaofo -10:00 f
Pacific/Fiji 13:00 t
Pacific/Funafuti 12:00 f
Pacific/Galapagos -06:00 f
Pacific/Gambier -09:00 f
Pacific/Guadalcanal 11:00 f
Pacific/Guam 10:00 f
Pacific/Honolulu -10:00 f
Pacific/Johnston -10:00 f
Pacific/Kiritimati 14:00 f
Pacific/Kosrae 11:00 f
Pacific/Kwajalein 12:00 f
Pacific/Majuro 12:00 f
Pacific/Marquesas -09:30 f
Pacific/Midway -11:00 f
Pacific/Nauru 12:00 f
Pacific/Niue -11:00 f
Pacific/Norfolk 11:30 f
Pacific/Noumea 11:00 f
Pacific/Pago_Pago -11:00 f
Pacific/Palau 09:00 f
Pacific/Pitcairn -08:00 f
Pacific/Ponape 11:00 f
Pacific/Port_Moresby 10:00 f
Pacific/Rarotonga -10:00 f
Pacific/Saipan 10:00 f
Pacific/Samoa -11:00 f
Pacific/Tahiti -10:00 f
Pacific/Tarawa 12:00 f
Pacific/Tongatapu 13:00 f
Pacific/Truk 10:00 f
Pacific/Wake 12:00 f
Pacific/Wallis 12:00 f
Pacific/Yap 10:00 f
Poland 01:00 f
Portugal 00:00 f
PRC 08:00 f
PST8PDT -08:00 f
ROC 08:00 f
ROK 09:00 f
Singapore 08:00 f
Turkey 02:00 f
UCT 00:00 f
Universal 00:00 f
US/Alaska -09:00 f
US/Aleutian -10:00 f
US/Arizona -07:00 f
US/Central -06:00 f
US/East-Indiana -05:00 f
US/Eastern -05:00 f
US/Hawaii -10:00 f
US/Indiana-Starke -06:00 f
US/Michigan -05:00 f
US/Mountain -07:00 f
US/Pacific -08:00 f
US/Pacific-New -08:00 f
US/Samoa -11:00 f
UTC 00:00 f
W-SU 03:00 f
WET 00:00 f
Zulu 00:00 f

通过时区简写来指定时区,即tz_abbrev。OSCAR支持的时区简写、时区简写对应的时间偏移及此简写代表的时区是否是夏令时如下表所示:

表216神通数据库支持的时间简写对应的时间偏移

abbrev utc_offset is_dst
ACSST 10:30 t
ACST -04:00 t
ACT -05:00 f
ADT -03:00 t
AESST 11:00 t
AEST 10:00 f
AFT 04:30 f
AKDT -08:00 t
AKST -09:00 f
ALMST 07:00 t
ALMT 06:00 f
AMST 05:00 t
AMT 04:00 f
ANAST 13:00 t
ANAT 12:00 f
ARST -02:00 t
ART -03:00 f
AST -04:00 f
AWSST 09:00 t
AWST 08:00 f
AZOST 00:00 t
AZOT -01:00 f
AZST 05:00 t
AZT 04:00 f
BDST 02:00 t
BDT 06:00 f
BNT 08:00 f
BORT 08:00 f
BOT -04:00 f
BRA -03:00 f
BRST -02:00 t
BRT -03:00 f
BST 01:00 t
BTT 06:00 f
CADT 10:30 t
CAST 09:30 f
CCT 08:00 f
CDT -05:00 t
CEST 02:00 t
CET 01:00 f
CETDST 02:00 t
CHADT 13:45 t
CHAST 12:45 f
CKT 12:00 f
CLST -03:00 t
CLT -04:00 f
COT -05:00 f
CST -06:00 f
CXT 07:00 f
DAVT 07:00 f
DDUT 10:00 f
EASST -05:00 t
EAST -06:00 f
EAT 03:00 f
EDT -04:00 t
EEST 03:00 t
EET 02:00 f
EETDST 03:00 t
EGST 00:00 t
EGT -01:00 f
EST -05:00 f
FJST 13:00 t
FJT -12:00 f
FKST -03:00 t
FKT -04:00 f
FNST -01:00 t
FNT -02:00 f
GALT -06:00 f
GAMT -09:00 f
GEST 04:00 t
GET 03:00 f
GFT -03:00 f
GILT 12:00 f
GMT 00:00 f
GYT -04:00 f
HKT 08:00 f
HST -10:00 f
ICT 07:00 f
IDT 03:00 t
IOT 06:00 f
IRKST 09:00 t
IRKT 08:00 f
IRT 03:30 f
IST 02:00 f
JAYT 09:00 f
JST 09:00 f
KDT 10:00 t
KGST 06:00 t
KGT 05:00 f
KOST 11:00 f
KRAST 08:00 t
KRAT 07:00 f
KST 09:00 f
LHDT 11:00 t
LHST 10:30 f
LIGT 10:00 f
LINT 14:00 f
LKT 06:00 f
MAGST 12:00 t
MAGT 11:00 f
MART -09:30 f
MAWT 06:00 f
MDT -06:00 t
MEST 02:00 t
MET 01:00 f
METDST 02:00 t
MEZ 01:00 f
MHT 12:00 f
MMT 06:30 f
MPT 10:00 f
MSD 04:00 t
MSK 03:00 f
MST -07:00 f
MUST 05:00 t
MUT 04:00 f
MVT 05:00 f
MYT 08:00 f
NDT -02:30 t
NFT -03:30 f
NOVST 07:00 t
NOVT 06:00 f
NPT 05:45 f
NST -03:30 f
NUT -11:00 f
NZDT 13:00 t
NZST 12:00 f
NZT 12:00 f
OMSST 07:00 t
OMST 06:00 f
PDT -07:00 t
PET -05:00 f
PETST 13:00 t
PETT 12:00 f
PGT 10:00 f
PHOT 13:00 f
PHT 08:00 f
PKT 05:00 f
PMDT -02:00 t
PMST -03:00 f
PONT 11:00 f
PST -08:00 f
PWT 09:00 f
PYST -03:00 t
PYT -04:00 f
RET 04:00 f
SADT 10:30 t
SAST 09:30 f
SCT 04:00 f
SGT 08:00 f
TAHT -10:00 f
TFT 05:00 f
TJT 05:00 f
TKT -10:00 f
TMT 05:00 f
TOT 13:00 f
TRUT 10:00 f
TVT 12:00 f
UCT 00:00 f
ULAST 09:00 t
ULAT 08:00 f
UT 00:00 f
UTC 00:00 f
UYST -02:00 t
UYT -03:00 f
UZST 06:00 t
UZT 05:00 f
VET -04:30 f
VLAST 11:00 t
VLAT 10:00 f
VUT 11:00 f
WADT 08:00 t
WAKT 12:00 f
WAST 07:00 f
WAT 01:00 f
WDT 09:00 t
WET 00:00 f
WETDST 01:00 t
WFT 12:00 f
WGST -02:00 t
WGT -03:00 f
YAKST 10:00 t
YAKT 09:00 f
YAPT 10:00 f
YEKST 06:00 t
YEKT 05:00 f
Z 00:00 f
ZULU 00:00 f

在采用时区简写方式输入时区时,某些时区简写在不同的地理区域上所对应的时间偏移可能是不同的。下表根据地理区域把这些特殊的时区简写进行了归类:

表217神通数据库支持的地理区域及各区域中特殊简写对应的时间偏移

地理区域 abbrev utc_offset is_dst
Africa CAT 02:00 f
  SAST 02:00 f
America AMT -04:00 f
  CST -05:00 f
  ECT -05:00 f
  HAST -10:00 f
  SRT -03:00 f
  WARST -03:00 t
Antarctica CAST 11:00 f
  DAVT 05:00 f
  MAWT 05:00 f
  ROTT -03:00 f
  SYOT 03:00 f
  VOST 06:00 f
Asia AQTT 05:00 f
  AST 03:00 f
  BDST 07:00 t
  CHOT 08:00 f
  CIT 08:00 f
  CST 08:00 f
  EIT 09:00 f
  GET 04:00 f
  GST 04:00 f
  HOVT 07:00 f
  IRST 03:30 f
  IST 05:30 f
  KGT 06:00 f
  ORAT 05:00 f
  QYZT 06:00 f
  SAKT 10:00 f
  TLT 09:00 f
  WIT 07:00 f
Atlantic CVT -01:00 f
  GST -02:00 f
Australia CST 09:30 f
  CWST 08:45 f
  EST 10:00 f
  WST 08:00 f
Brazil AMT -04:00 f
Cuba CST -05:00 f
Europe SAMT 04:00 f
  VOLT 03:00 f
India CCT 06:30 f
Iran IRST 03:30 f
Pacific ChST 10:00 f
  CKT -10:00 f
  FJST 13:00 t
  NCT 11:00 f
  NFT 11:30 f
  NRT 12:00 f
  SBT 11:00 f
  SST -11:00 f
  WSDT -10:00 t
PRC CST 08:00 f
ROC CST 08:00 f
US HAST -10:00 f
  SST -11:00 f

若要使用上表里的特殊时区简写,则需要设置环境变量TIMEZONE_ABBREV为相应的地理区域名称。例如想让时区简写SBT代表时区+11:00,则需要设置TIMEZONE_ABBREV ='Pacific'。如果没有设置TIMEZONE_ABBREV的值,则其默认为'Default',这时所支持的时区简写与表2-16中所列一致。

  • 输出格式

TIME WITH TIME ZONE类型的输出格式为:

hour:minute:second[.microsecond] +/-tz_hour:tz_minute,小时采用的是24小时制。hour、minute、second、tz_hour、tz_minute域输出都是2位数字,microsecond则根据实际存储的位数输出,最多不超过6位。

时间戳类型

神通数据库中提供的时间戳类型如下表:

表218神通数据库支持的时间戳类型

类型 描述 存储 最早 最晚 精确度
TIMESTAMP[(p)] 时间戳类型 8 字节 4714-11-24 00:00:00 BC 9999-12-31 23:59:59.999999 AD 1 微秒

神通数据库支持的时间戳类型用 TIMESTAMP表示,时间戳类型的有效输入由一个日期和时间的联接组成,因此分别遵循DATE类型和TIME类型的格式及精度。

时间戳常量由关键词TIMESTAMP标识,后接一个由单引号括起的格式为“日期时间”的字符串,单引号是时间戳串的一部分不能缺少。时间戳常量在日期串和时间串之间必须包含一个空格。如

TIMESTAMP'2003-8-29 11:20:45'

神通数据库提供了SQL兼容的函数 CURRENT_TIMESTAMP 用于时间戳类型数据的输入,它可以直接用在SQL语句中,如:

示例6: 使用 CURRENT_TIMESTAMP

SELECT CURRENT_TIMESTAMP;

--  结果如下
            NOW
----------------------------
 2015-04-07 16:10:51.208751
(1 row)

另外,为了方便,神通数据库还支持下表中的特殊值,但这些值需要用单引号括起来,并强制转换成时间戳类型。

表219神通数据库支持的特殊值

特殊值 描述 举例
epoch 1970-01-0100:00:00 (Unix 系统零时) select 'epoch'::timestamp;
now 当前事务时间 select 'now'::timestamp;
today 今日午夜 select 'today'::timestamp;
tomorrow 明日午夜 select'tomorrow'::timestamp;
yesterday 昨日午夜 select 'yesterday'::timestamp;
  • 输入格式

TIMESTAMP类型由日期和时间两部分组成,如果没有设置TIMESTAMPFORMAT参数,则分别遵循DATE类型和TIME类型的输入格式。

注解

如果TIMESTAMP串中不含时间信息,则时间默认为00:00:00。如果TIMESTAMP串不含日期信息,则默认为当前系统日期的当年当月1日。

  • 输出格式

TIMESTAMP类型的输出格式为'日期串时间串',如果没有设置TIMESTAMPFORMAT参数,则日期串的格式同DATE类型,受DateStyle参数控制,时间串的格式同TIME类型。

示例7: 查看TIMESTAMPFORMAT参数的示例

--  清理环境
DROP TABLE tab_ts CASCADE;


--  设置参数
SET DATEORDER = 'DMY';
SET DATESTYLE = 'DMY';
SET TIMESTAMPFORMAT = '';


--  创建包含 TIMESTAMP 列的表
CREATE TABLE tab_ts(a INT, b TIMESTAMP);

--  插入TIMESTAMP数据,成功插入
INSERT INTO tab_ts VALUES(1, '31-12-2012 12:12:12.123456');

--  插入TIMESTAMP数据,插入失败
INSERT INTO tab_ts VALUES(2, '2012-12-31 12:12:12.123456');
ERROR, 日期时间值越界, date/time field value out of range: "2012-12-31 12:12:12.123456"



--  查看未设置TIMESTAMPFORMAT时的TIMESTAMP 类型数据的格式
SELECT * FROM tab_ts ORDER BY a;
A(int)      |B(timestamp)      |
------------------------------
1           |2012-12-31 12:12:1|
            |2.123456          |
总数目:1

--  设置TIMESTAMP类型格式
SET TIMESTAMPFORMAT = 'YYYY-MM-DD HH24:MI:SS.FF';

--  插入TIMESTAMP数据,成功插入
INSERT INTO tab_ts VALUES(3, '2012-12-31 12:12:12.123456');


--  查看 TIMESTAMP 类型数据,输出格式符合TIMESTAMPFORMAT指定的格式
SELECT * FROM tab_ts ORDER BY a;
A(int)      |B(timestamp)      |
------------------------------
1           |2012-12-31 12:12:1|
            |2.123456          |
------------------------------
3           |2012-12-31 12:12:1|
            |2.123456          |
总数目:2

--  设置TIMESTAMP类型格式
SET TIMESTAMPFORMAT = 'YYYY-MM-DD';


--  查看 TIMESTAMP 类型数据,输出格式变化
SELECT * FROM tab_ts ORDER BY a;
A(int)      |B(timestamp)      |
------------------------------
1           |2012-12-31 12:12:1|
            |2.123456          |
------------------------------
3           |2012-12-31 12:12:1|
            |2.123456          |
总数目:2


--  清理环境
DROP TABLE tab_ts;

--  重置参数
RESET DATEFORMAT;
RESET DATEORDER;
RESET DATESTYLE;

注解

神通数据库会优先使用TIMESTAMPFORMAT参数(忽略DateStyle与DateOrder)用于控制TIMESTAMP类型的输入、输出格式。

带时区时间戳类型

神通数据库中提供的带时区时间戳类型如下表:

表220神通数据库支持的带时区时间戳类型

类型 描述 存储 最早(圆整到格林威治标准时间) 最晚(圆整到格林威治标准时间) 精确度
TIMESTAMP[(p)] WITH TIME ZONE 带时区时间戳类型 8 字节 4714-11-24 00:00:00 +00:00 BC 9999-12-31 23:59:59.999999 +00:00 AD 1 微秒

时区部分的表示范围和精确度同TIME[(p)] WITH TIME ZONE类型的时区部分。

  • 输入格式

TIMESTAMP WITH TIME ZONE类型的输入格式为'日期串时间串时区串',如果没有设置TIMESTAMPTZFORMAT参数,其中日期串遵循DATE类型的输入格式,时间串遵循TIME类型的输入格式,时区串的输入同TIME WITH TIME ZONE类型的时区部分。各部分之间须用空格分隔,并且各部分的位置可以互换,所表示的日期和时间是相同的。

注解

如果TIMESTAMP WITH TIME ZONE串中不含时间信息,则时间默认为00:00:00。 如果不含日期信息,则默认为当前系统日期的当年当月1日。 如果不含时区信息,则时区默认为服务器系统时区。

  • 输出格式

TIMESTAMP WITH TIME ZONE类型的输出格式为'日期串时间串时区串',如果没有设置TIMESTAMPTZFORMAT参数,其中日期串的格式同DATE类型;时间串的格式同TIME类型;时区串与输入的时区串不一定相同,输出的时区串为服务器时区,同时输出的日期时间串也是圆整到服务器时区之后的日期和时间。

示例8: 查看TIMESTAMPTZFORMAT参数的示例

set TIMESTAMPTZFORMAT='YYYY-MM-DD HH24:MI:SS.FF TZ';


select to_timestamp_tz('2012-12-12 12:12:12.123456 +9:00','YYYY-MM-DD HH24:MI:SS.FF TZ');
TO_TIMESTAMP_TZ(timestamptz)      |
----------------------------------
2012-12-12 11:12:12.123456 +08:00 |
总数目:1


select to_timestamp_tz('2012-12-12 12:12:12.123456 +9:00');
TO_TIMESTAMP_TZ(timestamptz)      |
----------------------------------
2012-12-12 11:12:12.123456 +08:00 |
总数目:1


select to_timestamp_tz('2012-12-12 +9:00 12:12:12.123456','YYYY-MM-DD TZ HH24:MI:SS.FF');
TO_TIMESTAMP_TZ(timestamptz)      |
----------------------------------
2012-12-12 11:12:12.123456 +08:00 |
总数目:1

注解

神通数据库会优先使用TIMESTAMPTZFORMAT参数(忽略DateStyle与DateOrder)用于控制TIMESTAMP WITH TIME ZONE类型的输入、输出格式。