TO_TIMESTAMP_TZ
将字符串值或 UNIX/POSIX 时期值转换为 TIMESTAMP WITH TIME ZONE
类型。
行为类型
语法
TO_TIMESTAMP_TZ ( { expression, pattern } | unix‑epoch )
参数
- 表达式
- 指定要转换的字符串值,类型为 CHAR 或 VARCHAR。
- 模式
- 指定输出模式字符串的 CHAR 或 VARCHAR。请参阅:
- unix‑epoch
- DOUBLE PRECISION 值,指定自 1970 年 1 月 1 日午夜 (UTC) 以来经过的秒数,不包括闰秒。INTEGER 值被隐式转换为 DOUBLE PRECISION。
注意
-
在从字符串到
TIMESTAMP
的转换中,毫秒 (MS) 和微秒 (US) 值用作秒小数点后面的部分。例如TO_TIMESTAMP('12:3', 'SS:MS')
不是指 3 毫秒,而是指 300 毫秒,因为转换将其算作 12 + 0.3 秒。这意味着,对于SS:MS
格式而言,输入值12:3
、12:30
和12:300
指定的是相同的毫秒数。要得到 3 毫秒,请使用12:003
,转换将其算作12 + 0.003 = 12.003
秒。下面是一个更为复杂的示例:
TO_TIMESTAMP('15:12:02.020.001230', 'HH:MI:SS.MS.US')
表示 15 小时 12 分钟零 2 秒 + 20 毫秒 + 1230 微秒 = 2.021230 秒。 -
要在输出中使用双引号字符,请在它前面加上双反斜杠。这样做很有必要,因为反斜杠在字符串常数中已经具有特殊含义。例如:
'\\\"YYYY Month\\\"'
-
TO_TIMESTAMP
如果不使用 FX 选项,则、TO_TIMESTAMP_TZ
和TO_DATE
会跳过输入字符串中的多个空格。必须将 FX 指定为模板中的第一项。例如:-
TO_TIMESTAMP('2000 JUN', 'YYYY MON')
是正确的。 -
TO_TIMESTAMP('2000 JUN', 'FXYYYY MON')
返回错误,因为TO_TIMESTAMP
仅接受一个空格。
-
-
如果使用多于四个数字的年份,则从字符串到
TIMESTAMP
或DATE
的YYYY
转换存在限制。在YYYY
之后必须使用非数字字符或模板,否则会始终将年份解释成四个数字。例如,给定以下实参,TO_DATE
将五位数年份 20000 解释为四位数年份:=> SELECT TO_DATE('200001131','YYYYMMDD'); TO_DATE ------------ 2000-01-13 (1 row)
应在年份后使用非数字分隔符。例如:
=> SELECT TO_DATE('20000-1131', 'YYYY-MMDD'); TO_DATE ------------- 20000-12-01 (1 row)
-
在从字符串到
TIMESTAMP
或DATE
的转换中,如果存在 YYY、YYYY 或 Y,YYY 字段,则会忽略 CC 字段。如果将 CC 与 YY 或 Y 一起使用,则将按 (CC–1)*100+YY 计算年份。
示例
=> SELECT TO_TIMESTAMP_TZ('13 Feb 2009', 'DD Mon YYY');
TO_TIMESTAMP_TZ
------------------------
1200-02-13 00:00:00-05
(1 row)
=> SELECT TO_TIMESTAMP_TZ(200120400);
TO_TIMESTAMP_TZ
------------------------
1976-05-05 01:00:00-04
(1 row)