首批通过分布式安全可靠测评,为关键业务系统打造
日期时间表达式
更新时间:2026-04-10 14:25:50
日期时间表达式(Datetime Expression)会生成日期时间数据类型的值。
日期时间表达式
日期时间表达式语法如下:
{TIMESTAMP | DATE} string [ AT
{ LOCAL
| TIME ZONE { '[ + | - ] hh:mi'
| DBTIMEZONE
| SESSIONTIMEZONE
| 'time_zone_name'
}
} ]
TIMESTAMP 或 DATE 加上字符串字面量可以生成 TIMESTAMP 或 DATE 类型的值,注意字符串的格式要与系统变量 NLS_TIMESTAMP_FORMAT 和 NLS_DATE_FORMAT 一致。系统变量的值可以通过下面的 SQL 查询:
obclient> SELECT * from v$nls_parameters WHERE parameter like '%FORMAT';
+-------------------------+------------------------------+--------+
| PARAMETER | VALUE | CON_ID |
+-------------------------+------------------------------+--------+
| NLS_DATE_FORMAT | DD-MON-RR | 0 |
| NLS_TIMESTAMP_FORMAT | DD-MON-RR HH.MI.SSXFF AM | 0 |
| NLS_TIMESTAMP_TZ_FORMAT | DD-MON-RR HH.MI.SSXFF AM TZR | 0 |
+-------------------------+------------------------------+--------+
3 rows in set
例如,系统变量 NLS_TIMESTAMP_FORMAT 的值为 DD-MON-RR HH.MI.SSXFF AM,可以用下面的表达式生成一个 TIMESTAMP 类型的值。
obclient> SELECT TIMESTAMP '2020-01-01 10:00:00' FROM DUAL;
+---------------------------------+
| TIMESTAMP'2020-01-0110:00:00' |
+---------------------------------+
| 01-JAN-20 10.00.00.000000000 AM |
+---------------------------------+
1 row in set
使用规则
如果指定 AT LOCAL,则数据库使用当前会话的时区。
如果指定 AT TIME ZONE,时区返回规则如下:
'[ + | - ] hh:mi':将时区指定为与 UTC 的偏移量。其中,hh指定小时数,mi指定分钟数。DBTIMEZONE:使用在数据库创建期间建立的数据库时区。SESSIONTIMEZONE:使用默认创建的或最近的ATLER SESSION语句创建的会话的会话时区。'time_zone_name':返回时区名称。关于有效时区区域的名称列表,可以通过字典视图V$TIMEZONE_NAMES查看。
示例
使用 AT TIME ZONE 将一个 TIMESTAMP 类型的值转换为另一个时区的值。
obclient> SELECT TIMESTAMP '2020-01-01 10:00:00' AT LOCAL FROM DUAL;
+--------------------------------------+
| TIMESTAMP'2020-01-0110:00:00'ATLOCAL |
+--------------------------------------+
| 01-JAN-20 10.00.00.000000 AM +08:00 |
+--------------------------------------+
1 row in set
obclient> SELECT TIMESTAMP '2020-01-01 10:00:00' AT TIME ZONE '-05:00' FROM DUAL;
+-------------------------------------------------+
| TIMESTAMP'2020-01-0110:00:00'ATTIMEZONE'-05:00' |
+-------------------------------------------------+
| 31-DEC-19 09.00.00.000000 PM -05:00 |
+-------------------------------------------------+
1 row in set