PolarDB PostgreSQL版(兼容Oracle)支持nls_timestamp(_tz)_format时间显示格式。
简介
- nls_timestamp_format用于控制- pg_catalog.to_char(arg1 timestamp)、- pg_catalog.to_timestamp(arg1 text)函数的转换格式和- timestamp类型数据的输出格式。
- nls_timestamp_tz_format用于控制- pg_catalog.to_char(arg1 timestamptz)、- pg_catalog.to_timestamp_tz(arg1 text)函数的转换格式和- timestamptz类型数据的输出格式。
说明 
- timestamp和- timestamp without time zone为同一类型。
- timestamptz和- timestamp with time zone为同一类型。
使用指南
- nls_timestamp_formatnls_timestamp_format的初始值为''。可以通过 SET命令将nls_timestamp_format设置为产品支持的合法的TIMESTAMP类型格式,若格式不合法,则会报错。可以通过 reset nls_timestamp_format;命令,对其进行重置。以'YYYY/MM/DD HH24:MI:SS'格式为例,示例如下:- 将nls_timestamp_format设置为'YYYY/MM/DD HH24:MI:SS':
 显示结果如下:set nls_timestamp_format to 'YYYY/MM/DD HH24:MI:SS';set
- 将 '2021-11-11 11:11:11'按照'YYYY/MM/DD HH24:MI:SS'格式进行转换,能够正确执行to_char函数:
 显示结果如下:select to_char('2021-11-11 11:11:11'::timestamp);to_char --------------------- 2021/11/11 11:11:11 (1 row)
- 将'2021-11-11 11:11:11'按照'YYYY/MM/DD HH24:MI:SS'格式进行转换,能够正确执行to_timestamp函数:
 显示结果如下:select to_timestamp('2021/11/11 11:11:11'::text);to_timestamp --------------------- 2021/11/11 11:11:11 (1 row)
- 将timestamp按照'YYYY/MM/DD HH24:MI:SS'格式进行显示:
 显示结果如下:select '2021-11-11 11:11:11'::timestamp;timestamp --------------------- 2021/11/11 11:11:11 (1 row)
 说明to_timestamp(arg1 TEXT)中arg1的格式要与nls_timestamp_format指定的格式完全匹配,否则会产生错误或非预期的结果:# 将nls_timestamp_format设置为'YYYY/MM/DD HH:MI:SS.FF'。 set nls_timestamp_format = 'YYYY/MM/DD HH:MI:SS.FF'; # 显示结果如下: set # 将'2000-03-28 08:00:00'按照 'YYYY/MM/DD HH:MI:SS.FF'格式进行转换,再执行to_timestamp函数。 select to_timestamp('2000-03-28 08:00:00'); # 显示结果如下; ERROR: date/time field value out of range: "2000-03-28 08:00:00" CONTEXT: PL/pgSQL function to_timestamp(text) line 7 at RETURN
- 将
- nls_timestamp_tz_formatnls_timestamp_tz_format的初始值为''。可以通过 SET命令将nls_timestamp_tz_format设置为产品支持的合法的TIMESTAMPTZ类型格式,若格式不合法,则会报错。可以通过 reset nls_timestamp_tz_format;命令,对其进行重置。以'YYYY/MM/DD HH24:MI:DD TZH:TZM'格式为例,示例如下:- 将nls_timestamp_tz_format设置为'YYYY/MM/DD HH24:MI:DD TZH:TZM':
 显示结果如下:set nls_timestamp_tz_format to 'YYYY/MM/DD HH24:MI:SS TZH:TZM';set
- 将 '2021-11-11 11:11:11 +8'按照'YYYY/MM/DD HH24:MI:DD TZH:TZM'格式进行转换,能够正确执行to_char函数:
 显示结果如下:select to_char('2021-11-11 11:11:11 +8'::timestamptz);to_char ---------------------------- 2021/11/11 03:11:11 +00:00 (1 row)
- 将'2021/11/11 11:11:11 +8'按照'YYYY/MM/DD HH24:MI:DD TZH:TZM'格式进行转换,能够正确执行to_timestamp函数:
 显示结果如下:select to_timestamp_tz('2021/11/11 11:11:11 +8'::text);to_timestamp_tz ---------------------------- 2021/11/11 03:11:11 +00:00 (1 row)
- 将timestamptz按照'YYYY/MM/DD HH24:MI:DD TZH:TZM'格式进行显示:
 显示结果如下:select '2021/11/11 11:11:11 +8'::timestamptztimestamptz ---------------------------- 2021/11/11 03:11:11 +00:00 (1 row)
 说明to_timestamp_tz(arg1 TEXT)中arg1的格式要与nls_timestamp_tz_format指定的格式完全匹配,否则会产生错误或非预期的结果:# 将nls_timestamp_tz_format设置为'YYYY/MM/DD HH:MI:SS.FF TZH:TZM'。 set nls_timestamp_tz_format = 'YYYY/MM/DD HH:MI:SS.FF TZH:TZM'; # 显示结果如下: set # 将'2000-03-28 08:00:00 +8'按照'YYYY/MM/DD HH:MI:SS.FF TZH:TZM'格式进行转换,再执行to_timestamp函数。 select to_timestamp('2000-03-28 08:00:00 +8'); # 显示结果如下: ERROR: date/time field value out of range: "2000-03-28 08:00:00 +8" CONTEXT: PL/pgSQL function to_timestamp(text) line 7 at RETURN
- 将