
# 时间和日期处理函数和操作符
#### 时间日期操作符
时间日期操作符请参见[表1]。
![](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
要尽量避免在查询中使用 'now'::date、'now'::timestamp、'now'::timestamptz字符串常量强转以及text_date('now')的类似表达式来获取数据库当前时间或者将当前时间值作为函数入参场景，在这些场景下，优化器会提前算出常量时间，造成查询结果不正确。
```
gaussdb=# EXPLAIN SELECT * FROM t1 WHERE b='now'::date;
QUERY PLAN
-----------------------------------------------------
Seq Scan on t1  (cost=0.00..13.60 rows=1 width=310)
Filter: ((b)::text = '2024-11-09 15:07:56'::text)
(2 rows)
gaussdb=# EXPLAIN SELECT * FROM t1 WHERE b=text_date('now');
QUERY PLAN
-----------------------------------------------------
Seq Scan on t1  (cost=0.00..13.60 rows=1 width=310)
Filter: ((b)::text = '2024-11-09'::text)
(2 rows)
```
推荐使用now()、currenttimestamp()函数作为获取数据库当前时间的方法。
```
gaussdb=# EXPLAIN SELECT * FROM t1 WHERE b=now();
QUERY PLAN
-----------------------------------------------------
Seq Scan on t1  (cost=0.00..14.80 rows=1 width=310)
Filter: ((b)::text = (now())::text)
(2 rows)
gaussdb=# EXPLAIN SELECT * FROM t1 WHERE b=text_date(now());
QUERY PLAN
----------------------------------------------------------
Seq Scan on t1  (cost=0.00..16.00 rows=1 width=310)
Filter: ((b)::text = (text_date((now())::text))::text)
(2 rows)
```
用户在使用时间和日期操作符时，对应的操作数请使用明确的类型前缀修饰，以确保数据库在解析操作数的时候能够与用户预期一致，不会产生用户非预期的结果。
比如下面示例没有明确数据类型就会出现异常错误。
```
SELECT date '2001-10-01' - '7' AS RESULT;
```
 表1时间和日期操作符 
| 操作符 | 示例                                                                                                                                                                                                                           |
|:---|:---|
| +   | ``` gaussdb=# SELECT date '2001-9-28' + integer '7' AS RESULT; result ------------ 2001-10-05 (1 row) ``` 说明： 在ORA兼容模式下，查询结果为2001-10-05 00:00:00。 |
| +   | ``` gaussdb=# SELECT date '2001-09-28' + interval '1 hour' AS RESULT; result --------------------- 2001-09-28 01:00:00 (1 row) ```                                                                                           |
| +   | ``` gaussdb=# SELECT date '2001-09-28' + time '03:00' AS RESULT; result --------------------- 2001-09-28 03:00:00 (1 row) ```                                                                                                |
| +   | ``` gaussdb=# SELECT interval '1 day' + interval '1 hour' AS RESULT; result ---------------- 1 day 01:00:00 (1 row) ```                                                                                                      |
| +   | ``` gaussdb=# SELECT timestamp '2001-09-28 01:00' + interval '23 hours' AS RESULT; result --------------------- 2001-09-29 00:00:00 (1 row) ```                                                                              |
| +   | ``` gaussdb=# SELECT time '01:00' + interval '3 hours' AS RESULT; result ---------- 04:00:00 (1 row) ```                                                                                                                     |
| -   | ``` gaussdb=# SELECT date '2001-10-01' - date '2001-09-28' AS RESULT; result -------- 3 (1 row) ```                                                                                                                          |
| -   | ``` gaussdb=# SELECT date '2001-10-01' - integer '7' AS RESULT; result --------------------- 2001-09-24 00:00:00 (1 row) ```                                                                                                 |
| -   | ``` gaussdb=# SELECT date '2001-09-28' - interval '1 hour' AS RESULT; result --------------------- 2001-09-27 23:00:00 (1 row) ```                                                                                           |
| -   | ``` gaussdb=# SELECT time '05:00' - time '03:00' AS RESULT; result ---------- 02:00:00 (1 row) ```                                                                                                                           |
| -   | ``` gaussdb=# SELECT time '05:00' - interval '2 hours' AS RESULT; result ---------- 03:00:00 (1 row) ```                                                                                                                     |
| -   | ``` gaussdb=# SELECT timestamp '2001-09-28 23:00' - interval '23 hours' AS RESULT; result --------------------- 2001-09-28 00:00:00 (1 row) ```                                                                              |
| -   | ``` gaussdb=# SELECT interval '1 day' - interval '1 hour' AS RESULT; result ---------- 23:00:00 (1 row) ```                                                                                                                  |
| -   | ``` gaussdb=# SELECT timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00' AS RESULT; result ---------------- 1 day 15:00:00 (1 row) ```                                                                               |
| \*  | ``` gaussdb=# SELECT 900 * interval '1 second' AS RESULT; result ---------- 00:15:00 (1 row) ```                                                                                                                             |
| \*  | ``` gaussdb=# SELECT 21 * interval '1 day' AS RESULT; result --------- 21 days (1 row) ```                                                                                                                                   |
| \*  | ``` gaussdb=# SELECT double precision '3.5' * interval '1 hour' AS RESULT; result ---------- 03:30:00 (1 row) ```                                                                                                            |
| /   | ``` gaussdb=# SELECT interval '1 hour' / double precision '1.5' AS RESULT; result ---------- 00:40:00 (1 row) ```                                                                                                            |
   
#### 时间/日期函数
- age(timestamp, timestamp) 描述：将两个参数相减，并以年、月、日作为返回值。若相减值为负，则函数返回亦为负，入参可以都带timezone或都不带timezone。
  返回值类型：interval
  示例：
  ```
  gaussdb=# SELECT age(timestamp '2001-04-10', timestamp '1957-06-13');
             age           
  -------------------------
   43 years 9 mons 27 days
  (1 row)
  ```
  
- age(timestamp) 描述：当前SQL执行开始时刻的系统时间和参数相减，入参可以带或者不带timezone。
  返回值类型：interval
  示例：
  ```
  gaussdb=# SELECT age(timestamp '1957-06-13');
             age           
  -------------------------
   60 years 2 mons 18 days
  (1 row)
  ```
  
- clock_timestamp() 描述：返回当前函数被调用时的系统时间的时间戳。volatile函数，每次扫描都会取最新的时间戳，因此在一次查询中每次调用结果不相同。
  返回值类型：timestamp with time zone
  示例：
  ```
  gaussdb=# SELECT clock_timestamp();
          clock_timestamp        
  -------------------------------
   2017-09-01 16:57:36.636205+08
  (1 row)
  ```
  
- current_date 描述：返回当前本条SQL启动的系统时间的日期。
  返回值类型：date
  示例：
  ```
  gaussdb=# SELECT current_date;
      date    
  ------------
   2017-09-01
  (1 row)
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下返回值类型为timestamp。
  
- current_time 描述：当前事务的开始时刻的系统时间。
  返回值类型：time with time zone
  示例：
  ```
  gaussdb=# SELECT current_time;
         timetz       
  --------------------
   16:58:07.086215+08
  (1 row)
  ```
  
- current_timestamp 描述：返回的结果为当前SQL启动的系统时间。语句级别时间，同一个语句内返回结果不变。
  返回值类型：timestamp with time zone
  示例：
  ```
  gaussdb=# SELECT current_timestamp;
         pg_systimestamp        
  ------------------------------
   2017-09-01 16:58:19.22173+08
  (1 row)
  ```
  
- current_timestamp(precision) 描述：返回的结果为当前事务启动的系统时间，并将结果的微秒圆整为指定小数位。
  返回值类型：timestamp with time zone
  示例：
  ```
  gaussdb=# SELECT current_timestamp(1);
         timestamptz            
  ------------------------------
   2017-09-01 16:58:19.2+08
  (1 row)
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  - 此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下，precision参数支持numeric类型的整值，否则仅支持int输入。
  
  - 微秒末位的0不显示，如2017-09-01 10:32:19.212000输出显示为2017-09-01 10:32:19.212。
    
- pg_systimestamp() 描述：当前日期和时间(当前语句的开始)。
  返回值类型：timestamp with time zone
  示例：
  ```
  gaussdb=# SELECT pg_systimestamp();
          pg_systimestamp
  -------------------------------
   2015-10-14 11:21:28.317367+08
  (1 row)
  ```
  
- date_part(text, timestamp) 描述：
  获取日期或者时间值中子域的值，例如年或者小时的值。
  等效于extract(field from timestamp)。
  timestamp类型：abstime、date、interval、reltime、time with time zone、time without time zone、timestamp with time zone、timestamp without time zone。
  返回值类型：double precision
  示例：
  ```
  gaussdb=# SELECT date_part('hour', timestamp '2001-02-16 20:38:40');
   date_part 
  -----------
          20
  (1 row)
  ```
  
- date_part(text, interval) 描述：获取月份的值。如果大于12，则取与12的模。等效于extract(field from timestamp)。
  返回值类型：double precision
  示例：
  ```
  gaussdb=# SELECT date_part('month', interval '2 years 3 months');
   date_part 
  -----------
           3
  (1 row)
  ```
  
- date_trunc(text, timestamp) 描述：截取到参数text指定的精度。
  返回值类型：interval、timestamp with time zone、timestamp without time zone
  示例：
  ```
  gaussdb=# SELECT date_trunc('hour', timestamp  '2001-02-16 20:38:40');
       date_trunc      
  ---------------------
   2001-02-16 20:00:00
  (1 row)
  ```
  
- trunc(timestamp) 描述：默认按天截取。
  示例：
  ```
  gaussdb=# SELECT trunc(timestamp  '2001-02-16 20:38:40');                                                                                                                                                                   trunc
  ---------------------
  2001-02-16 00:00:00
  (1 row)
  ```
  
- trunc(arg1, arg2) 描述：截取到arg2指定的精度。
  - arg1类型：interval、timestamp with time zone、timestamp without time zone
  
  - arg2类型：text
  
  
  返回值类型：interval、timestamp with time zone、timestamp without time zone
  示例：
  ```
  gaussdb=# SELECT trunc(timestamp  '2001-02-16 20:38:40', 'hour');                                                                                                                                                                   trunc
  ---------------------
  2001-02-16 20:00:00
  (1 row)
  ```
  
- round(arg1, arg2) 描述：四舍五入到arg2指定的精度。
  arg1类型：timestamp without time zone
  arg2类型：text
  返回值类型：timestamp without time zone
  示例：
  ```
  gaussdb=# SELECT round(timestamp  '2001-02-16 20:38:40', 'hour');                                                                                                                                                                   round
  ---------------------
  2001-02-16 21:00:00
  (1 row)
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效。
  
- daterange(arg1, arg2) 描述：获取时间边界信息。
  arg1类型：date
  arg2类型：date
  返回值类型：daterange
  示例：
  ```
  gaussdb=# select daterange('2000-05-06','2000-08-08');
          daterange        
  -------------------------
   [2000-05-06,2000-08-08)
  (1 row)
  ```
  
- daterange(arg1, arg2, text) 描述：获取时间边界信息。
  arg1类型：date
  arg2类型：date
  text类型：text
  返回值类型：daterange
  示例：
  ```
  gaussdb=# select daterange('2000-05-06','2000-08-08','[]');
          daterange        
  -------------------------
   [2000-05-06,2000-08-09)
  (1 row)
  ```
  
- extract(field from timestamp) 描述：获取小时的值。
  返回值类型：double precision
  示例：
  ```
  gaussdb=# SELECT extract(hour from timestamp '2001-02-16 20:38:40');
   date_part 
  -----------
          20
  (1 row)
  ```
  
- extract(field from interval) 描述：获取月份的值。如果大于12，则取与12的模。
  返回值类型：double precision
  示例：
  ```
  gaussdb=# SELECT extract(month from interval '2 years 3 months');
   date_part 
  -----------
           3
  (1 row)
  ```
  
- isfinite(date) 描述：判断日期是否为有限值，是则返回t，否则返回f。
  返回值类型：Boolean
  示例：
  ```
  gaussdb=# SELECT isfinite(date '2001-02-16');
   isfinite 
  ----------
   t
  (1 row)
  gaussdb=# SELECT isfinite(date 'infinity');
   isfinite 
  ----------
   f
  (1 row)
  ```
  
- isfinite(timestamp) 描述：判断时间戳是否为有限值，是则返回t，否则返回f。
  返回值类型：Boolean
  示例：
  ```
  gaussdb=# SELECT isfinite(timestamp '2001-02-16 21:28:30');
   isfinite 
  ----------
   t
  (1 row)
  gaussdb=# SELECT isfinite(timestamp 'infinity');
   isfinite 
  ----------
   f
  (1 row)
  ```
  
- isfinite(interval) 描述：判断时间间隔是否为有限值，是则返回t，暂不支持返回f，输入'infinity'会报错。
  返回值类型：Boolean
  示例：
  ```
  gaussdb=# SELECT isfinite(interval '4 hours');
   isfinite 
  ----------
   t
  (1 row)
  ```
  
- justify_days(interval) 描述：将时间间隔以月（30天为一月）为单位。
  返回值类型：interval
  示例：
  ```
  gaussdb=# SELECT justify_days(interval '35 days');
   justify_days 
  --------------
   1 mon 5 days
  (1 row)
  ```
  
- justify_hours(interval) 描述：将时间间隔以天（24小时为一天）为单位。
  返回值类型：interval
  示例：
  ```
  gaussdb=# SELECT JUSTIFY_HOURS(INTERVAL '27 HOURS');
   justify_hours  
  ----------------
   1 day 03:00:00
  (1 row)
  ```
  
- justify_interval(interval) 描述：结合justify_days和justify_hours，调整interval。
  返回值类型：interval
  示例：
  ```
  gaussdb=# SELECT JUSTIFY_INTERVAL(INTERVAL '1 MON -1 HOUR');
   justify_interval 
  ------------------
   29 days 23:00:00
  (1 row)
  ```
  
- localtime 描述：当前事务的开始时刻的系统时间。
  返回值类型：time
  示例：
  ```
  gaussdb=# SELECT localtime AS RESULT;
       result
  ----------------
   16:05:55.664681
  (1 row)
  ```
  
- localtimestamp 描述：返回当前本条SQL执行开始时刻的系统日期和时间。
  返回值类型：timestamp
  示例：
  ```
  gaussdb=# SELECT localtimestamp;
           timestamp          
  ----------------------------
   2017-09-01 17:03:30.781902
  (1 row)
  ```
  
- now() 描述：当前事务的开始时刻的系统的日期及时间，同一个事务内返回结果相同。
  返回值类型：timestamp with time zone
  示例：
  ```
  gaussdb=# SELECT now();
                now              
  -------------------------------
   2017-09-01 17:03:42.549426+08
  (1 row)
  ```
  
- timenow() 描述：返回当前本条SQL执行开始时刻的系统日期和时间。
  返回值类型：abstime
  示例：
  ```
  gaussdb=# select timenow();
          timenow
  ------------------------
   2020-06-23 20:36:56+08
  (1 row)
  ```
  
- numtodsinterval(num, interval_unit) 描述：将数字转换为interval类型。num为numeric类型数字，interval_unit为固定格式字符串（'DAY' \| 'HOUR' \| 'MINUTE' \| 'SECOND'）。
  可以通过设置GUC参数IntervalStyle为ORA，兼容该函数interval输出格式。
  返回值类型：interval
  示例：
  ```
  gaussdb=# SELECT numtodsinterval(100, 'HOUR');
   numtodsinterval 
  -----------------
   100:00:00
  (1 row)
  gaussdb=# SET intervalstyle = oracle;
  SET
  gaussdb=# SELECT numtodsinterval(100, 'HOUR');
          numtodsinterval
  -------------------------------
   +000000004 04:00:00.000000000
  (1 row)
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下：当参数interval_unit为 'DAY' 时，参数num超过1000000000会报错。
  
- numtoyminterval(num, interval_unit) 描述：将数字转换为interval类型。num为numeric类型数字，interval_unit为固定格式字符串（'YEAR' \| 'MONTH'）。
  可以通过设置GUC参数IntervalStyle为ORA，兼容interval输出格式。
  返回值类型：interval
  示例：
  ```
  gaussdb=# \c gaussdb_o;
  Non-SSL connection (SSL connection is recommended when requiring high-security)
  You are now connected to database "gaussdb_o" as user "omm".
  gaussdb_o=# set a_format_version='10c';
  SET
  gaussdb_o=# set a_format_dev_version='s2';
  SET
  gaussdb=# SELECT numtoyminterval(100, 'MONTH');
   numtoyminterval 
  -----------------
   8 years 4 mons
  (1 row)
  gaussdb_o=# SET intervalstyle = oracle;
  SET
  gaussdb_o=# SELECT numtoyminterval(100, 'MONTH');
   numtoyminterval
  -----------------
   8-4
  (1 row)
  gaussdb_o=# \c postgres
  Non-SSL connection (SSL connection is recommended when requiring high-security)
  You are now connected to database "postgres" as user "omm".
  gaussdb=# DROP DATABASE gaussdb_o;
  DROP DATABASE
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效。
  
- new_time(date, timezone1,timezone2) 描述：当timezone1所表示时区的日期时间为date的时候，返回此时timezone2所表示时区的日期时间值。
  返回值类型：timestamp
  示例：
  ```
  gaussdb=# select new_time('1997-10-10','AST','EST');
        new_time       
  ---------------------
   1997-10-09 23:00:00
  (1 row)
  gaussdb=# SELECT NEW_TIME(TO_TIMESTAMP ('10-Sep-02 14:10:10.123000','DD-Mon-RR HH24:MI:SS.FF'), 'AST', 'PST');
          new_time         
  -------------------------
   2002-09-10 10:10:10.123
  (1 row)
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下生效。
  
- sessiontimezone 描述：当前会话的时区，无入参。
  返回值类型：text
  示例：
  ```
  gaussdb=# SELECT SESSIONTIMEZONE;
   session_time_zone 
  -------------------
   PST8PDT
  (1 row)
  gaussdb=# SELECT LOWER(SESSIONTIMEZONE);
     lower   
  -----------
   @ 8 hours
  (1 row)
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下生效。
  当set session time zone的值为GMT+08:00/GMT-08:00格式时，正值的偏移量被用于格林威治以西的位置，例如GMT+08:00表示西八区，GMT-08:00表示东八区。
  
- sys_extract_utc(timestamp\| timestamptz) 描述：从具有时区偏移量或时区区域名称的日期时间值中提取UTC（协调世界时-以前称为格林威治平均时间）。如果未指定时区，则日期时间与会话时区关联。入参有timestmp和timestamp两种形式。
  返回值类型：timestamp。
  示例：
  ```
  gaussdb=# SELECT SYS_EXTRACT_UTC(TIMESTAMP '2000-03-28 11:30:00.00'); 
     sys_extract_utc   
  ---------------------
   2000-03-28 03:30:00
  (1 row)
  gaussdb=# SELECT SYS_EXTRACT_UTC(TIMESTAMPTZ '2000-03-28 11:30:00.00 -08:00'); 
     sys_extract_utc   
  ---------------------
   2000-03-28 19:30:00
  (1 row)
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下生效。
  
- tz_offset('time_zone_name' \| '(+/-)hh:mi' \| SESSIONTIMEZONE \| DBTIMEZONE) 描述：入参有以上四种形式，返回入参所表示时区的UTC偏移量。
  返回值类型：text。
  示例：
  ```
  gaussdb=# SELECT TZ_OFFSET('US/Pacific');
   tz_offset 
  -----------
   -08:00
  (1 row)
  gaussdb=# SELECT TZ_OFFSET(sessiontimezone);
   tz_offset 
  -----------
   +08:00
  (1 row)
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下生效。
  
- pg_sleep(seconds) 描述：服务器线程延迟时间，单位为秒。注意，当数据库调用该函数时，会获取相应的事务快照，相当于一个长事务，如果入参时间过长可能导致数据库oldestxmin无法推进，影响表的回收和查询性能。
  返回值类型：void
  示例：
  ```
  gaussdb=# SELECT pg_sleep(10);
   pg_sleep 
  ----------
  (1 row)
  ```
  
- statement_timestamp() 描述：当前日期和时间（当前语句的开始）。
  返回值类型：timestamp with time zone
  示例：
  ```
  gaussdb=# SELECT statement_timestamp();
        statement_timestamp      
  -------------------------------
   2017-09-01 17:04:39.119267+08
  (1 row)
  ```
  
- sysdate 描述：返回当前本条SQL执行时刻的系统日期和时间。
  返回值类型：timestamp
  示例：
  ```
  gaussdb=# SELECT sysdate;
         sysdate       
  ---------------------
   2017-09-01 17:04:49
  (1 row)
  ```
  
- current_sysdate 描述：返回当前本条SQL执行开始时刻的系统日期和时间。
  返回值类型：timestamp
  示例：
  ```
  gaussdb=# SELECT current_sysdate();
     current_sysdate   
  ---------------------
   2023-06-20 20:09:02
  (1 row)
  ```
  
- timeofday() 描述：返回当前函数被调用时的系统时间的时间时间戳（像clock_timestamp，但是返回时为text）。
  返回值类型：text
  示例：
  ```
  gaussdb=# SELECT timeofday();
                timeofday              
  -------------------------------------
   Fri Sep 01 17:05:01.167506 2017 CST
  (1 row)
  ```
  
- transaction_timestamp() 描述：当前事务开始的系统的日期及时间。
  返回值类型：timestamp with time zone
  示例：
  ```
  gaussdb=# SELECT transaction_timestamp();
       transaction_timestamp     
  -------------------------------
   2017-09-01 17:05:13.534454+08
  (1 row)
  ```
  
- add_months(d,n) 描述：用于计算时间点d再加上n个月的时间。
  d：timestamp类型的值，以及可以隐式转换为timestamp类型的值。
  n：INTEGER类型的值，以及可以隐式转换为INTEGER类型的值。
  返回值类型：timestamp
  示例：
  ```
  gaussdb=# SELECT add_months(to_date('2017-5-29', 'yyyy-mm-dd'), 11) FROM sys_dummy;
       add_months      
  ---------------------
   2018-04-29 00:00:00
  (1 row)
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下：
  - 当计算结果大于公元9999年时会报错。
  
  - 参数n若入参为小数则不会被四舍五入，而是被截断。
    
- last_day(d) 描述：用于计算时间点d当月最后一天的时间。
  返回值类型：timestamp
  示例：
  ```
  gaussdb=# SELECT last_day(to_date('2017-01-01', 'YYYY-MM-DD')) AS cal_result;
       cal_result      
  ---------------------
   2017-01-31 00:00:00
  (1 row)
  ```
  
 
- months_between(d1, d2) 描述：用于计算时间点d1和时间点d2的月份差值，如果两个日期都是月末或天数相同，则返回整数，否则返回值带小数，按31天/月计算。
  返回值类型：numeric
  示例：
  ```
  gaussdb=# SELECT months_between(to_date('2022-10-31', 'yyyy-mm-dd'), to_date('2022-09-30', 'yyyy-mm-dd'));
   months_between 
  ----------------
               1
  (1 row)
  gaussdb=# SELECT months_between(to_date('2022-10-30', 'yyyy-mm-dd'), to_date('2022-09-30', 'yyyy-mm-dd'));
   months_between 
  ----------------
               1
  (1 row)
  gaussdb=# SELECT months_between(to_date('2022-10-29', 'yyyy-mm-dd'), to_date('2022-09-30', 'yyyy-mm-dd'));
      months_between     
  -----------------------
   .96774193548387096774
  (1 row)
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效。
  
- next_day(x,y) 描述：用于计算时间点x开始的下一个星期几（y）的时间。
  返回值类型：timestamp
  示例：
  ```
  gaussdb=# SELECT next_day(timestamp '2017-05-25 00:00:00','Sunday')AS cal_result;
       cal_result      
  ---------------------
   2017-05-28 00:00:00
  (1 row)
  ```
  
![](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
- next_day第二个参数支持缩写(不区分大小写)，包括SUN、MON、TUE、WED、THU、THUR、FRI、SAT。
 
- tinterval(abstime, abstime) 描述：用两个绝对时间创建时间间隔。
  返回值类型：tinterval
  示例：
  ```
  gaussdb=# call tinterval(abstime 'May 10, 1947 23:59:12', abstime 'Mon May  1 00:30:30 1995');
                        tinterval
  -----------------------------------------------------
   ["1947-05-10 23:59:12+08" "1995-05-01 00:30:30+08"]
  (1 row)
  ```
  

- tintervalend(tinterval) 描述：返回tinterval的结束时间。
  返回值类型：abstime
  示例：
  ```
  gaussdb=# SELECT tintervalend('["Sep 4, 1983 23:59:12" "Oct4, 1983 23:59:12"]');
        tintervalend
  ------------------------
   1983-10-04 23:59:12+08
  (1 row)
  ```
  

- tintervalrel(tinterval)
  描述：计算并返回tinterval的相对时间。
  返回值类型：reltime
  示例：
  ```
  gaussdb=# SELECT tintervalrel('["Sep 4, 1983 23:59:12" "Oct4, 1983 23:59:12"]');
   tintervalrel
  --------------
   1 mon
  (1 row)
  ```
  
- smalldatetime_ge 描述：判断是否第一个参数大于第二个参数。
  参数：smalldatetime, smalldatetime
  返回值类型：boolean
  
  
- smalldatetime_cmp 描述：对比smalldatetime是否相等。
  参数：smalldatetime, smalldatetime
  返回值类型：integer
  
  
- smalldatetime_eq 描述：对比smalldatetime是否相等。
  参数：smalldatetime, smalldatetime
  返回值类型：boolean
  
  
- smalldatetime_gt 描述：判断是否第一个参数小于第二个参数。
  参数：smalldatetime, smalldatetime
  返回值类型：boolean
  
  
- smalldatetime_hash 描述：计算timestamp对应的哈希值。
  参数：smalldatetime
  返回值类型：integer
  
  
- smalldatetime_in 描述：输入timestamp。
  参数：cstring, oid, integer
  返回值类型：smalldatetime
  
  
- smalldatetime_larger 描述：返回较大的timestamp。
  参数：smalldatetime, smalldatetime
  返回值类型：smalldatetime
  
  
- smalldatetime_le 描述：判断是否第一个参数小于第二个参数。
  参数：smalldatetime, smalldatetime
  返回值类型：boolean
  
  
- smalldatetime_lt 描述：判断是否第一个参数大于第二个参数。
  参数：smalldatetime, smalldatetime
  返回值类型：boolean
  
  
- smalldatetime_ne 描述：比较两个timestamp是否不相等。
  参数：smalldatetime, smalldatetime
  返回值类型：boolean
  
  
- smalldatetime_out 描述：timestamp转换为外部形式。
  参数：smalldatetime
  返回值类型：cstring
  
  
- smalldatetime_send 描述：timestamp转换为二进制格式。
  参数：smalldatetime
  返回值类型：bytea
  
  
- smalldatetime_smaller 描述：返回较小的一个smalldatetime。
  参数：smalldatetime, smalldatetime
  返回值类型：smalldatetime
  
  
- smalldatetime_to_abstime 描述：smalldatetime转换为abstime。
  参数：smalldatetime
  返回值类型：abstime
  
  
- smalldatetime_to_time 描述：smalldatetime转换为time。
  参数：smalldatetime
  返回值类型：time without time zone
  
  
- smalldatetime_to_timestamp 描述：smalldatetime转换为timestamp。
  参数：smalldatetime
  返回值类型：timestamp without time zone
  
  
- smalldatetime_to_timestamptz 描述：smalldatetime转换为timestamptz。
  参数：smalldatetime
  返回值类型：timestamp with time zone
  
  
- smalldatetime_to_varchar2 描述：smalldatetime转换为varchar2。
  参数：smalldatetime
  返回值类型：character varying
  ![](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  获取当前时间有多种方式，请根据实际业务从场景选择合适的接口：
  1. 以下接口按照当前事务的开始时刻返回值：
     ```
     CURRENT_DATE
     CURRENT_TIME CURRENT_TIME(precision)
     CURRENT_TIMESTAMP(precision)
     LOCALTIME
     LOCALTIMESTAMP
     LOCALTIME(precision)
     LOCALTIMESTAMP(precision)
     transaction_timestamp()
     now()
     ```
     其中CURRENT_TIME和CURRENT_TIMESTAMP(precision)传递带有时区的值；LOCALTIME和LOCALTIMESTAMP传递的值不带时区。CURRENT_TIME、LOCALTIME和LOCALTIMESTAMP可以指定精度参数，这会导致结果在秒字段中四舍五入到小数位数。如果没有精度参数，结果将被给予所能得到的全部精度。
     因为这些函数全部都按照当前事务的开始时刻返回结果，所以它们的值在事务运行的整个期间内都不改变。我们认为这是一个特性：目的是为了允许一个事务在"当前"时间上有一致的概念，这样在同一个事务里的多个修改可以保持同样的时间戳。
     其中transaction_timestamp()等价于CURRENT_TIMESTAMP(precision)，表示当前语句所在事务的开启时间。now()等效于transaction_timestamp()。
     
  
  2. 以下接口返回当前语句开始时间：
     ```
     statement_timestamp()
     ```
     statement_timestamp()返回当前语句的开始时刻（更准确的说是收到客户端最后一条命令的时间）。statement_timestamp()和transaction_timestamp()在一个事务的第一条命令期间返回值相同，但是在随后的命令中却不一定相同。
     
  
  3. 以下接口返回函数被调用时的真实当前时间：
     ```
     clock_timestamp()
     timeofday()
     ```
     clock_timestamp()返回真正的当前时间，因此它的值甚至在同一条SQL 命令中都会变化。timeofday()和clock_timestamp()相似，timeofday()也返回真实的当前时间，但是它的结果是一个格式化的text串，而不是timestamp with time zone值。
     
    
[表2]显示了可以用于截断日期和时间值的模板。
 表2用于日期/时间截断的模式 
| 类别                                                                                                      | 模式         | 描述                                                                                                                                  |
|:---|:---|:---|
| 微秒             | MICROSECON | 截断日期/时间，精确到微秒（000000 - 999999）        |
| 微秒             | US         | 截断日期/时间，精确到微秒（000000 - 999999）        |
| 微秒             | USEC       | 截断日期/时间，精确到微秒（000000 - 999999）        |
| 微秒             | USECOND    | 截断日期/时间，精确到微秒（000000 - 999999）        |
| 毫秒        | MILLISECON | 截断日期/时间，精确到毫秒（000 - 999）              |
| 毫秒        | MS         | 截断日期/时间，精确到毫秒（000 - 999）              |
| 毫秒        | MSEC       | 截断日期/时间，精确到毫秒（000 - 999）              |
| 毫秒        | MSECOND    | 截断日期/时间，精确到毫秒（000 - 999）              |
| 秒                | S          | 截断日期/时间，精确到秒（00 - 59）                        |
| 秒                | SEC        | 截断日期/时间，精确到秒（00 - 59）                        |
| 秒                | SECOND     | 截断日期/时间，精确到秒（00 - 59）                        |
| 分钟        | M          | 截断日期/时间，精确到分钟（00 - 59）                |
| 分钟        | MI         | 截断日期/时间，精确到分钟（00 - 59）                |
| 分钟        | MIN        | 截断日期/时间，精确到分钟（00 - 59）                |
| 分钟        | MINUTE     | 截断日期/时间，精确到分钟（00 - 59）                |
| 小时       | H          | 截断日期/时间，精确到小时（00 - 23）                         |
| 小时       | HH         | 截断日期/时间，精确到小时（00 - 23）                         |
| 小时       | HOUR       | 截断日期/时间，精确到小时（00 - 23）                         |
| 小时       | HR         | 截断日期/时间，精确到小时（00 - 23）                         |
| 天     | D          | 截断日期/时间，精确到天（01-01 - 12-31）     |
| 天     | DAY        | 截断日期/时间，精确到天（01-01 - 12-31）     |
| 天     | DD         | 截断日期/时间，精确到天（01-01 - 12-31）     |
| 天     | DDD        | 截断日期/时间，精确到天（01-01 - 12-31）     |
| 天     | J          | 截断日期/时间，精确到天（01-01 - 12-31）     |
| 周                        | W          | 截断日期/时间，精确到周（本周的第一天）                               |
| 周                        | WEEK       | 截断日期/时间，精确到周（本周的第一天）                               |
| 月                 | MM         | 截断日期/时间，精确到月（本月的第一天）                          |
| 月                 | MON        | 截断日期/时间，精确到月（本月的第一天）                          |
| 月                 | MONTH      | 截断日期/时间，精确到月（本月的第一天）                          |
| 季度             | Q          | 截断日期/时间，精确到季度（本季度的第一天）                    |
| 季度             | QTR        | 截断日期/时间，精确到季度（本季度的第一天）                    |
| 季度             | QUARTER    | 截断日期/时间，精确到季度（本季度的第一天）                    |
| 年         | Y          | 截断日期/时间，精确到年（本年的第一天）                  |
| 年         | YEAR       | 截断日期/时间，精确到年（本年的第一天）                  |
| 年         | YR         | 截断日期/时间，精确到年（本年的第一天）                  |
| 年         | YYYY       | 截断日期/时间，精确到年（本年的第一天）                  |
| 十年                    | DEC        | 截断日期/时间，精确到十年（本十年的第一天）                             |
| 十年                    | DECADE     | 截断日期/时间，精确到十年（本十年的第一天）                             |
| 世纪                                                                                                      | C          | 截断日期/时间，精确到世纪（本世纪的第一天）                  |
| 世纪                                                                                                      | CC         | 截断日期/时间，精确到世纪（本世纪的第一天）                  |
| 世纪                                                                                                      | CENT       | 截断日期/时间，精确到世纪（本世纪的第一天）                  |
| 世纪                                                                                                      | CENTURY    | 截断日期/时间，精确到世纪（本世纪的第一天）                  |
| 千年                       | MIL        | 截断日期/时间，精确到千年（本千年的第一天）                       |
| 千年                       | MILLENNIA  | 截断日期/时间，精确到千年（本千年的第一天）                       |
| 千年                       | MILLENNIUM | 截断日期/时间，精确到千年（本千年的第一天）                       |
   
 表3用于时间截断和时间四舍五入的参数 
| 类别                                                                                                                          | 模式         | 描述                                                                                                                                                    |
|:---|:---|:---|
| 分钟                              | M          | 截断或四舍五入日期/时间，精确到分钟（00 - 59）                              |
| 分钟                              | MI         | 截断或四舍五入日期/时间，精确到分钟（00 - 59）                              |
| 分钟                              | MIN        | 截断或四舍五入日期/时间，精确到分钟（00 - 59）                              |
| 分钟                              | MINUTE     | 截断或四舍五入日期/时间，精确到分钟（00 - 59）                              |
| 小时                  | H          | 截断或四舍五入日期/时间，精确到小时（00 - 23）                         |
| 小时                  | HH         | 截断或四舍五入日期/时间，精确到小时（00 - 23）                         |
| 小时                  | HOUR       | 截断或四舍五入日期/时间，精确到小时（00 - 23）                         |
| 小时                  | HR         | 截断或四舍五入日期/时间，精确到小时（00 - 23）                         |
| 小时                  | HH12       | 截断或四舍五入日期/时间，精确到小时（00 - 23）                         |
| 小时                  | HH24       | 截断或四舍五入日期/时间，精确到小时（00 - 23）                         |
| 天                                   | DD         | 截断或四舍五入日期/时间，精确到天（01-01 - 12-31）                                |
| 天                                   | DDD        | 截断或四舍五入日期/时间，精确到天（01-01 - 12-31）                                |
| 天                                   | J          | 截断或四舍五入日期/时间，精确到天（01-01 - 12-31）                                |
| ISO周                                                                                                                        | IW         | 截断或四舍五入日期/时间，精确到周（本周的第一天,第一天为周一）                                                                                                                      |
| 周                                    | DAY        | 截断或四舍五入日期/时间，精确到周（本周的第一天,第一天为周日）                              |
| 周                                    | DY         | 截断或四舍五入日期/时间，精确到周（本周的第一天,第一天为周日）                              |
| 周                                    | D          | 截断或四舍五入日期/时间，精确到周（本周的第一天,第一天为周日）                              |
| 月周                                                                                                                          | W          | 截断或四舍五入日期/时间，精确到周（本周的第一天,第一天为本月第一天的周数）                                                                                                                |
| 年周                                                                                                                          | WW         | 截断或四舍五入日期/时间，精确到周（本周的第一天,第一天为本年第一天的周数）                                                                                                                |
| 月                              | MM         | 截断或四舍五入日期/时间，精确到月（本月的第一天）                                |
| 月                              | MON        | 截断或四舍五入日期/时间，精确到月（本月的第一天）                                |
| 月                              | MONTH      | 截断或四舍五入日期/时间，精确到月（本月的第一天）                                |
| 月                              | RM         | 截断或四舍五入日期/时间，精确到月（本月的第一天）                                |
| 季度                                   | Q          | 截断或四舍五入日期/时间，精确到季度（本季度的第一天）                                  |
| 季度                                   | QTR        | 截断或四舍五入日期/时间，精确到季度（本季度的第一天）                                  |
| 季度                                   | QUARTER    | 截断或四舍五入日期/时间，精确到季度（本季度的第一天）                                  |
| 年        | Y          | 截断或四舍五入日期/时间，精确到年（本年的第一天）        |
| 年        | YEAR       | 截断或四舍五入日期/时间，精确到年（本年的第一天）        |
| 年        | YR         | 截断或四舍五入日期/时间，精确到年（本年的第一天）        |
| 年        | YYYY       | 截断或四舍五入日期/时间，精确到年（本年的第一天）        |
| 年        | SYYYY      | 截断或四舍五入日期/时间，精确到年（本年的第一天）        |
| 年        | YYY        | 截断或四舍五入日期/时间，精确到年（本年的第一天）        |
| 年        | YY         | 截断或四舍五入日期/时间，精确到年（本年的第一天）        |
| 年        | SYEAR      | 截断或四舍五入日期/时间，精确到年（本年的第一天）        |
| 十年                                         | DEC        | 截断或四舍五入日期/时间，精确到十年（本十年的第一天）                                        |
| 十年                                         | DECADE     | 截断或四舍五入日期/时间，精确到十年（本十年的第一天）                                        |
| 世纪                       | C          | 截断或四舍五入日期/时间，精确到世纪（本世纪的第一天）                        |
| 世纪                       | CC         | 截断或四舍五入日期/时间，精确到世纪（本世纪的第一天）                        |
| 世纪                       | CENT       | 截断或四舍五入日期/时间，精确到世纪（本世纪的第一天）                        |
| 世纪                       | CENTURY    | 截断或四舍五入日期/时间，精确到世纪（本世纪的第一天）                        |
| 世纪                       | SCC        | 截断或四舍五入日期/时间，精确到世纪（本世纪的第一天）                        |
| 千年                                   | MIL        | 截断或四舍五入日期/时间，精确到千年（本千年的第一天）                                     |
| 千年                                   | MILLENNIA  | 截断或四舍五入日期/时间，精确到千年（本千年的第一天）                                     |
| 千年                                   | MILLENNIUM | 截断或四舍五入日期/时间，精确到千年（本千年的第一天）                                     |
   
![](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
[表3]中行为仅在ORA兼容模式数据库中参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效。
- timestamp_diff(text, timestamp, timestamp) 描述：计算两个日期时间之间的差值，截取到参数text指定的精度。
  返回值类型：int64
  示例：
  ```
  gaussdb=# SELECT timestamp_diff('year','2018-01-01','2020-04-01');
   timestamp_diff 
  ----------------
                2
  (1 row)
  gaussdb=# SELECT timestamp_diff('month','2018-01-01','2020-04-01');
   timestamp_diff 
  ----------------
               27
  (1 row)
  gaussdb=# SELECT timestamp_diff('quarter','2018-01-01','2020-04-01');
   timestamp_diff 
  ----------------
                9
  (1 row)
  gaussdb=# SELECT timestamp_diff('week','2018-01-01','2020-04-01');
   timestamp_diff 
  ----------------
              117
  (1 row)
  gaussdb=# SELECT timestamp_diff('day','2018-01-01','2020-04-01');
   timestamp_diff 
  ----------------
              821
  (1 row)
  gaussdb=# SELECT timestamp_diff('hour','2018-01-01 10:10:10','2018-01-01 12:12:12');
   timestamp_diff 
  ----------------
                2
  (1 row)
  gaussdb=# SELECT timestamp_diff('minute','2018-01-01 10:10:10','2018-01-01 12:12:12');
   timestamp_diff 
  ----------------
              122
  (1 row)
  gaussdb=# SELECT timestamp_diff('second','2018-01-01 10:10:10','2018-01-01 10:12:12');
   timestamp_diff 
  ----------------
              122
  (1 row)
  gaussdb=# SELECT timestamp_diff('microsecond','2018-01-01 10:10:10','2018-01-01 10:12:12');
   timestamp_diff 
  ----------------
        122000000
  (1 row)
  ```
  
#### TIMESTAMPDIFF
- **TIMESTAMPDIFF(** *unit , timestamp_expr1, timestamp_expr2* **)**
  timestampdiff函数是计算两个日期时间之间(timestamp_expr2-timestamp_expr1)的差值，并以unit形式范围结果。timestamp_expr1，timestamp_expr2必须是一个timestamp、timestamptz、date类型的值表达式。unit表示的是两个日期差的单位。
  等效于timestamp_diff(text, timestamp, timestamp)。
  ![](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  该函数仅在GaussDB兼容MySQL类型时（即dbcompatibility = 'MYSQL'）有效，其他类型不支持该函数。
  

- year 年份。
  ```
  gaussdb=# SELECT TIMESTAMPDIFF(YEAR, '2018-01-01', '2020-01-01');
   timestamp_diff
  ----------------
                2
  (1 row)
  ```
  
 
- quarter 季度。
  ```
  gaussdb=# SELECT TIMESTAMPDIFF(QUARTER, '2018-01-01', '2020-01-01');
   timestamp_diff
  ----------------
                8
  (1 row)
  ```
  
- month 月份。
  ```
  gaussdb=# SELECT TIMESTAMPDIFF(MONTH, '2018-01-01', '2020-01-01');
   timestamp_diff
  ----------------
               24
  (1 row)
  ```
  
- week 星期。
  ```
  gaussdb=# SELECT TIMESTAMPDIFF(WEEK, '2018-01-01', '2020-01-01');
   timestamp_diff
  ----------------
              104
  (1 row)
  ```
  
- day
  天。
  ```
  gaussdb=# SELECT TIMESTAMPDIFF(DAY, '2018-01-01', '2020-01-01');
   timestamp_diff
  ----------------
              730
  (1 row)
  ```
  

- hour 小时。
  ```
  gaussdb=# SELECT TIMESTAMPDIFF(HOUR, '2020-01-01 10:10:10', '2020-01-01 11:11:11');
   timestamp_diff
  ----------------
                1
  (1 row)
  ```
  

- minute 分钟。
  ```
  gaussdb=# SELECT TIMESTAMPDIFF(MINUTE, '2020-01-01 10:10:10', '2020-01-01 11:11:11');
   timestamp_diff
  ----------------
               61
  (1 row)
  ```
  

- second 秒。
  ```
  gaussdb=# SELECT TIMESTAMPDIFF(SECOND, '2020-01-01 10:10:10', '2020-01-01 11:11:11');
   timestamp_diff
  ----------------
             3661
  (1 row)
  ```
  

- microseconds 秒域（包括小数部分）乘以1,000,000。
  ```
  gaussdb=# SELECT TIMESTAMPDIFF(MICROSECOND, '2020-01-01 10:10:10.000000', '2020-01-01 10:10:10.111111');
   timestamp_diff
  ----------------
           111111
  (1 row)
  ```
  

- timestamp_expr含有时区
  ```
  gaussdb=# SELECT TIMESTAMPDIFF(HOUR,'2020-05-01 10:10:10-01','2020-05-01 10:10:10-03');
   timestamp_diff
  ----------------
                2
  (1 row)
  ```
  
 #### EXTRACT
- **EXTRACT(** *field* **FROM** *source* **)**
  extract函数从日期或时间的数值里抽取子域，比如年、小时等。source必须是一个timestamp、time或interval类型的值表达式（类型为date的表达式转换为timestamp，因此也可以用）。field是一个标识符或者字符串，它指定从源数据中抽取的域。extract函数返回类型为double precision的数值。field的取值范围如下所示。
  

- century 世纪。
  第一个世纪从0001-01-01 00:00:00 AD开始。这个定义适用于所有使用阳历的国家。没有0世纪，直接从公元前1世纪到公元1世纪。
  示例：
  ```
  gaussdb=# SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13');
   date_part 
  -----------
          20
  (1 row)
  ```
  
- day
  - 如果source为timestamp，表示月份里的日期（1-31）。
    ```
    gaussdb=# SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40');
     date_part 
    -----------
            16
    (1 row)
    ```
    
  
  - 如果source为interval，表示天数。
    ```
    gaussdb=# SELECT EXTRACT(DAY FROM INTERVAL '40 days 1 minute');
     date_part 
    -----------
            40
    (1 row)
    ```
    
   
- decade 年份除以10。
  ```
  gaussdb=# SELECT EXTRACT(DECADE FROM TIMESTAMP '2001-02-16 20:38:40');
   date_part 
  -----------
         200
  (1 row)
  ```
  
- dow 每周的星期几，星期天（0）到星期六（6）。
  ```
  gaussdb=# SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40');
   date_part 
  -----------
           5
  (1 row)
  ```
  
- doy 一年的第几天（1\~365/366）。
  ```
  gaussdb=# SELECT EXTRACT(DOY FROM TIMESTAMP '2001-02-16 20:38:40');
   date_part 
  -----------
          47
  (1 row)
  ```
  
- epoch
  - 如果source为timestamp with time zone，表示自1970-01-01 00:00:00-00 UTC以来的秒数（结果可能是负数）； 如果source为date和timestamp，表示自1970-01-01 00:00:00-00当地时间以来的秒数；
    如果source为interval，表示时间间隔的总秒数。
    ```
    gaussdb=# SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40.12-08');
      date_part   
    --------------
     982384720.12
    (1 row)
    ```
    ```
    gaussdb=# SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours');
     date_part 
    -----------
        442800
    (1 row)
    ```
    
  
  - 将epoch值转换为时间戳的方法。
    ```
    gaussdb=# SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 982384720.12 * INTERVAL '1 second' AS RESULT;
              result          
    ---------------------------
     2001-02-17 12:38:40.12+08
    (1 row)
    ```
    
   
- hour 小时域（0-23）。
  ```
  gaussdb=# SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40');
   date_part 
  -----------
          20
  (1 row)
  ```
  
- isodow 一周的第几天（1-7）。
  星期一为1，星期天为7。
  ![](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  除了星期天外，都与dow相同。
  ```
  gaussdb=# SELECT EXTRACT(ISODOW FROM TIMESTAMP '2001-02-18 20:38:40');
   date_part 
  -----------
           7
  (1 row)
  ```
  
- isoyear
  日期中的ISO 8601标准年（不适用于间隔）。
  每个带有星期一开始的周中包含1月4日的ISO年，所以在年初的1月或12月下旬的ISO年可能会不同于阳历的年。详细信息请参见后续的[week]描述。
  ```
  gaussdb=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-01');
   date_part 
  -----------
        2005
  (1 row)
  gaussdb=# SELECT EXTRACT(WEEK FROM TIMESTAMP '2006-01-01 00:00:40');
   date_part
  -----------
          52
  (1 row)
  ```
  ```
  gaussdb=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-02');
   date_part 
  -----------
        2006
  (1 row)
  gaussdb=# SELECT EXTRACT(WEEK FROM TIMESTAMP '2006-01-02 00:00:40');
   date_part
  -----------
           1
  (1 row)
  ```
  
- microseconds 秒域（包括小数部分）乘以1,000,000。
  ```
  gaussdb=# SELECT EXTRACT(MICROSECONDS FROM TIME '17:12:28.5');
   date_part 
  -----------
    28500000
  (1 row)
  ```
  
- millennium 千年。
  20世纪（19xx年）里面的年份在第二个千年里。第三个千年从2001年1月1日零时开始。
  ```
  gaussdb=# SELECT EXTRACT(MILLENNIUM FROM TIMESTAMP '2001-02-16 20:38:40');
   date_part 
  -----------
           3
  (1 row)
  ```
  
- milliseconds 秒域（包括小数部分）乘以1000。请注意它包括完整的秒。
  ```
  gaussdb=# SELECT EXTRACT(MILLISECONDS FROM TIME '17:12:28.5');
   date_part 
  -----------
       28500
  (1 row)
  ```
  
- minute 分钟域（0-59）。
  ```
  gaussdb=# SELECT EXTRACT(MINUTE FROM TIMESTAMP '2001-02-16 20:38:40');
   date_part 
  -----------
          38
  (1 row)
  ```
  
- month 如果source为timestamp，表示一年里的月份数（1-12）。
  ```
  gaussdb=# SELECT EXTRACT(MONTH FROM TIMESTAMP '2001-02-16 20:38:40');
   date_part 
  -----------
           2
  (1 row)
  ```
  如果source为interval，表示月的数目，然后对12取模（0-11）。
  ```
  gaussdb=# SELECT EXTRACT(MONTH FROM INTERVAL '2 years 13 months');
   date_part 
  -----------
           1
  (1 row)
  ```
  
- quarter 该天所在的该年的季度（1-4）。
  ```
  gaussdb=# SELECT EXTRACT(QUARTER FROM TIMESTAMP '2001-02-16 20:38:40');
   date_part 
  -----------
           1
  (1 row)
  ```
  
- second 秒域，包括小数部分（0-59）。
  ```
  gaussdb=# SELECT EXTRACT(SECOND FROM TIME '17:12:28.5');
   date_part 
  -----------
        28.5
  (1 row)
  ```
  
- timezone 与UTC的时区偏移量，单位为秒。正数对应UTC东边的时区，负数对应UTC西边的时区。
  
- timezone_hour 时区偏移量的小时部分。
  
- timezone_minute 时区偏移量的分钟部分。
  
- week
  该天在所在的年份里是第几周。ISO 8601定义一年的第一周包含该年的一月四日（ISO-8601 的周从星期一开始）。换句话说，一年的第一个星期四在第一周。
  在ISO定义里，一月的头几天可能是前一年的第52或者第53周，十二月的后几天可能是下一年第一周。比如，2006-01-01是2005年的第52周，而2006-01-02是2006年的第1周。建议[isoyear]字段和week一起使用以得到一致的结果。
  ```
  gaussdb=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-01');
   date_part 
  -----------
        2005
  (1 row)
  gaussdb=# SELECT EXTRACT(WEEK FROM TIMESTAMP '2006-01-01 00:00:40');
   date_part
  -----------
          52
  (1 row)
  ```
  ```
  gaussdb=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-02');
   date_part 
  -----------
        2006
  (1 row)
  gaussdb=# SELECT EXTRACT(WEEK FROM TIMESTAMP '2006-01-02 00:00:40');
   date_part
  -----------
           1
  (1 row)
  ```
  
- year 年份域。
  ```
  gaussdb=# SELECT EXTRACT(YEAR FROM TIMESTAMP '2001-02-16 20:38:40');
   date_part 
  -----------
        2001
  (1 row)
  ```
  
 
#### date_part
date_part函数是在传统的Ingres函数的基础上制作的（该函数等效于SQL标准函数extract）：
**date_part('** *field* **',** *source* **)**
这里的field参数必须是一个字符串，而不是一个名称。有效的field与extract一样，详细信息请参见[EXTRACT]。
示例：
```
gaussdb=# SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40');
 date_part 
-----------
        16
(1 row)
```
```
gaussdb=# SELECT date_part('hour', INTERVAL '4 hours 3 minutes');
 date_part 
-----------
         4
(1 row)
```
[表4]显示了可以用于格式化日期和时间值的模板。
 表4用于日期/时间格式化的模式 
| 类别   | 模式                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 描述                                        |
|:---|:---|:---|
| 小时   | HH                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 一天的小时数（01-12）                             |
| 小时   | HH12                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 一天的小时数（01-12）                             |
| 小时   | HH24                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 一天的小时数（00-23）                             |
| 分钟   | MI                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 分钟（00-59）                                 |
| 秒    | SS                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 秒（00-59）                                  |
| 秒    | FF                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 微秒（000000-999999）                         |
| 秒    | FF1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 微秒（0-9）                                   |
| 秒    | FF2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 微秒（00-99）                                 |
| 秒    | FF3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 微秒（000-999）                               |
| 秒    | FF4                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 微秒（0000-9999）                             |
| 秒    | FF5                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 微秒（00000-99999）                           |
| 秒    | FF6                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 微秒（000000-999999）                         |
| 秒    | SSSSS                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | 午夜后的秒（0-86399）                            |
| 上、下午 | AM或A.M.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | 上午标识                                      |
| 上、下午 | PM或P.M.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | 下午标识                                      |
| 年    | Y,YYY                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | 带逗号的年（4和更多位）                              |
| 年    | SYYYY                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | 公元前四位年                                    |
| 年    | YYYY                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 年（4和更多位）                                  |
| 年    | YYY                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 年的后三位                                     |
| 年    | YY                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 年的后两位                                     |
| 年    | Y                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 年的最后一位                                    |
| 年    | IYYY                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | ISO年（4位或更多位）                              |
| 年    | IYY                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | ISO年的最后三位                                 |
| 年    | IY                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | ISO年的最后两位                                 |
| 年    | I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | ISO年的最后一位                                 |
| 年    | RR                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 年的后两位（可在21世纪存储20世纪的年份）                    |
| 年    | RRRR                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 可接收4位年或两位年。若是两位，则和RR的返回值相同，若是四位，则和YYYY相同。 |
| 年    | - BC或B.C.  - AD或A.D.   | 纪元标识。BC（公元前），AD（公元后）。                     |
| 月    | MONTH                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | 全长大写月份名（空白填充为9字符）                         |
| 月    | MON                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 大写缩写月份名（3字符）                              |
| 月    | MM                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 月份数（01-12）                                |
| 月    | RM                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 罗马数字的月份（I-XII ；I=JAN）（大写）                 |
| 天    | DAY                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 全长大写日期名（空白填充为9字符）                         |
| 天    | DY                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 缩写大写日期名（3字符）                              |
| 天    | DDD                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 一年里的日（001-366）                            |
| 天    | DD                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 一个月里的日（01-31）                             |
| 天    | D                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 一周里的日（1-7 ；周日是 1）                         |
| 周    | W                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 一个月里的周数（1-5）（第一周从该月第一天开始）                 |
| 周    | WW                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 一年里的周数（1-53）（第一周从该年的第一天开始）                |
| 周    | IW                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | ISO一年里的周数（第一个星期四在第一周里）                    |
| 世纪   | CC                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 世纪（2位）（21 世纪从 2001-01-01 开始）              |
| 儒略日  | J                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 儒略日（自公元前 4712 年 1 月 1 日来的天数）              |
| 季度   | Q                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 季度                                        |
   
在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下新增用于格式化日期和时间值的模式：
表5新增用于格式化日期和时间值的模式 
| 类别   | 模式    | 描述                      |
|:---|:---|:---|
| 世纪   | SCC   | 世纪标识，公元前会显示-            |
| 年    | SYYYY | 返回数字型年，公元前会显示-          |
| 年    | RR    | 返回日期的2位年份               |
| 年    | RRRR  | 返回日期的4位年份               |
| 年    | YEAR  | 返回字符型年                  |
| 年    | SYEAR | 返回字符型年，公元前会显示-          |
| 日期格式 | DL    | 返回指定长日期形式               |
| 日期格式 | DS    | 返回指定短日期                 |
| 日期格式 | TS    | 返回指定时间格式                |
| 秒    | FF7   | 微秒（0000000-9999990）     |
| 秒    | FF8   | 微秒（00000000-99999900）   |
| 秒    | FF9   | 微秒（000000000-999999000） |
   
![](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
上表中RR计算年的规则如下：
- 输入的两位年份在00\~49之间： 当前年份的后两位在00\~49之间，返回值年份的前两位和当前年份的前两位相同。
  当前年份的后两位在50\~99之间，返回值年份的前两位是当前年份的前两位加1。
  
- 输入的两位年份在50\~99之间： 当前年份的后两位在00\~49之间，返回值年份的前两位是当前年份的前两位减1。
  当前年份的后两位在50\~99之间，返回值年份的前两位和当前年份的前两位相同。
  
 
![](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下：
- to_date, to_timestamp函数支持FX模式（输入和模式严格对应），支持X模式（小数点）。
- 输入模式不能出现超过一次，表示相同信息的模式不能同时出现。如SYYYY和BC不能同时出现。
- 模式大小写不敏感。
- 建议输入和模式之间使用分隔符，否则不保证行为与O完全一致。
 
