云数据库 GAUSSDB-时间和日期处理函数和操作符:时间/日期函数

时间:2024-11-02 18:50:29

时间/日期函数

  • age(timestamp, timestamp)

    描述:将两个参数相减,并以年、月、日作为返回值。若相减值为负,则函数返回亦为负,入参可以都带timezone或都不带timezone。

    返回值类型:interval

    示例:

    1
    2
    3
    4
    5
    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

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT age(timestamp '1957-06-13');
               age           
    -------------------------
     60 years 2 mons 18 days
    (1 row)
    
  • clock_timestamp()

    描述:返回当前函数被调用时的系统时间的时间戳。volatile函数,每次扫描都会取最新的时间戳,因此在一次查询中每次调用结果不相同。

    返回值类型:timestamp with time zone

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT clock_timestamp();
            clock_timestamp        
    -------------------------------
     2017-09-01 16:57:36.636205+08
    (1 row)
    
  • current_date

    描述:返回当前本条SQL启动的系统时间的日期。

    返回值类型:date

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT current_date;
        date    
    ------------
     2017-09-01
    (1 row)
    

    此函数在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下返回值类型为timestamp。

  • current_time

    描述:当前事务的开始时刻的系统时间。

    返回值类型:time with time zone

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT current_time;
           timetz       
    --------------------
     16:58:07.086215+08
    (1 row)
    
  • current_timestamp

    描述:返回的结果为当前SQL启动的系统时间。在PL/SQL中,简单的赋值语句如:time1 := current_timestamp,被认为是表达式,所以会返回上一条SQL语句启动时间。

    返回值类型:timestamp with time zone

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT current_timestamp;
           pg_systimestamp        
    ------------------------------
     2017-09-01 16:58:19.22173+08
    (1 row)
    
  • current_timestamp(precision)

    描述:返回的结果为当前事务启动的系统时间,并将结果的微秒圆整为指定小数位。

    返回值类型:timestamp with time zone

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT current_timestamp(1);
           timestamptz            
    ------------------------------
     2017-09-01 16:58:19.2+08
    (1 row)
    
    • 此函数在A兼容模式数据库中且参数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

    示例:

    1
    2
    3
    4
    5
    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

    示例:

    1
    2
    3
    4
    5
    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

    示例:

    1
    2
    3
    4
    5
    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

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT date_trunc('hour', timestamp  '2001-02-16 20:38:40');
         date_trunc      
    ---------------------
     2001-02-16 20:00:00
    (1 row)
    
  • trunc(timestamp)

    描述:默认按天截取。

    示例:

    1
    2
    3
    4
    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

    示例:

    1
    2
    3
    4
    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

    示例:

    1
    2
    3
    4
    gaussdb=# SELECT round(timestamp  '2001-02-16 20:38:40', 'hour');                                                                                                                                                                   round
    ---------------------
    2001-02-16 21:00:00
    (1 row)
    

    此函数在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效。

  • daterange(arg1, arg2)

    描述:获取时间边界信息。arg1和arg2的类型为date。

    返回值类型:daterange

    示例:

    1
    2
    3
    4
    5
    gaussdb=# select daterange('2000-05-06','2000-08-08');
            daterange        
    -------------------------
     [2000-05-06,2000-08-08)
    (1 row)
    
  • daterange(arg1, arg2, text)

    描述:获取时间边界信息。arg1和arg2的类型为date,text类型为text。

    返回值类型:daterange

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT daterange('2000-05-06','2000-08-08','[]');
            daterange        
    -------------------------
     [2000-05-06,2000-08-09)
    (1 row)
    
  • extract(field from timestamp)

    描述:获取小时的值。

    返回值类型:double precision

    示例:

    1
    2
    3
    4
    5
    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

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT extract(month from interval '2 years 3 months');
     date_part 
    -----------
             3
    (1 row)
    
  • isfinite(date)

    描述:判断日期是否为有限值,是则返回t,否则返回f。

    返回值类型:Boolean

    示例:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    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

    示例:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    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

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT isfinite(interval '4 hours');
     isfinite 
    ----------
     t
    (1 row)
    
  • justify_days(interval)

    描述:将时间间隔以月(30天为一月)为单位。

    返回值类型:interval

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT justify_days(interval '35 days');
     justify_days 
    --------------
     1 mon 5 days
    (1 row)
    
  • justify_hours(interval)

    描述:将时间间隔以天(24小时为一天)为单位。

    返回值类型:interval

    示例:

    1
    2
    3
    4
    5
    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

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT JUSTIFY_INTERVAL(INTERVAL '1 MON -1 HOUR');
     justify_interval 
    ------------------
     29 days 23:00:00
    (1 row)
    
  • localtime

    描述:当前事务的开始时刻的系统时间。

    返回值类型:time

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT localtime AS RESULT;
         result
    ----------------
     16:05:55.664681
    (1 row)
    
  • localtimestamp

    描述:返回当前本条SQL执行开始时刻的系统日期和时间。

    返回值类型:timestamp

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT localtimestamp;
             timestamp          
    ----------------------------
     2017-09-01 17:03:30.781902
    (1 row)
    
  • now()

    描述:当前事务的开始时刻的系统的日期及时间,同一个事务内返回结果相同。

    返回值类型:timestamp with time zone

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT now();
                  now              
    -------------------------------
     2017-09-01 17:03:42.549426+08
    (1 row)
    
  • timenow()

    描述:返回当前本条SQL执行开始时刻的系统日期和时间。

    返回值类型:abstime

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT timenow();
            timenow
    ------------------------
     2020-06-23 20:36:56+08
    (1 row)
    
  • dbtimezone

    描述:当前数据库的时区。

    返回值类型:text

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT dbtimezone;
            dbtimezone
    ------------------------
     PRC
    (1 row)
    

    此函数在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效。

  • numtodsinterval(num, interval_unit)

    描述:将数字转换为interval类型。num为numeric类型数字,interval_unit为固定格式字符串('DAY' | 'HOUR' | 'MINUTE' | 'SECOND')。

    可以通过设置GUC参数IntervalStyle为a,兼容该函数interval输出格式。

    返回值类型:interval

    示例:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    gaussdb=# SELECT numtodsinterval(100, 'HOUR');
     numtodsinterval 
    -----------------
     100:00:00
    (1 row)
    
    gaussdb=# SET intervalstyle = a;
    SET
    gaussdb=# SELECT numtodsinterval(100, 'HOUR');
            numtodsinterval
    -------------------------------
     +000000004 04:00:00.000000000
    (1 row)
    

    此函数在A兼容模式数据库中且参数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为a,兼容该函数interval输出格式。

    返回值类型:interval

    示例:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    gaussdb=# SELECT numtoyminterval(100, 'MONTH');
     numtoyminterval 
    -----------------
     8 years 4 mons
    (1 row)
    
    gaussdb=# SET intervalstyle = 'a';
    SET
    gaussdb=# SELECT numtoyminterval(100, 'MONTH');
     numtoyminterval 
    -----------------
     8-4
    (1 row)
    

    此函数在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效。

  • new_time(date, timezone1,timezone2)

    描述:当timezone1所表示时区的日期时间为date的时候,返回此时timezone2所表示时区的日期时间值。

    返回值类型:timestamp

    示例:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    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)
    

    此函数在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下生效。

  • sessiontimezone

    描述:当前会话的时区,无入参。

    返回值类型:text。

    示例:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    gaussdb=# SELECT SESSIONTIMEZONE;
     session_time_zone 
    -------------------
     PST8PDT
    (1 row)
    gaussdb=# SELECT LOWER(SESSIONTIMEZONE);
       lower   
    -----------
     @ 8 hours
    (1 row)
    

    此函数在A兼容模式数据库中且参数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。

    示例:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    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)
    

    此函数在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效。

  • tz_offset('time_zone_name' | '(+/-)hh:mi' | SESSIONTIMEZONE | DBTIMEZONE)

    描述:入参有以上四种形式,返回入参所表示时区的UTC偏移量。

    返回值类型:text。

    示例:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    gaussdb=# SELECT TZ_OFFSET('US/Pacific');
     tz_offset 
    -----------
     -08:00
    (1 row)
    gaussdb=# SELECT TZ_OFFSET(sessiontimezone);
     tz_offset 
    -----------
     +08:00
    (1 row)
    

    此函数在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下生效。

  • pg_sleep(seconds)

    描述:服务器线程延迟时间,单位为秒。

    返回值类型:void

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT pg_sleep(10);
     pg_sleep 
    ----------
    
    (1 row)
    
  • statement_timestamp()

    描述:当前日期和时间(当前语句的开始)。

    返回值类型:timestamp with time zone

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT statement_timestamp();
          statement_timestamp      
    -------------------------------
     2017-09-01 17:04:39.119267+08
    (1 row)
    
  • sysdate

    描述:返回当前本条SQL执行时刻的系统日期和时间。

    返回值类型:timestamp

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT sysdate;
           sysdate       
    ---------------------
     2017-09-01 17:04:49
    (1 row)
    
  • current_sysdate

    描述:返回当前本条SQL执行开始时刻的系统日期和时间。

    返回值类型:timestamp

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT current_sysdate();
       current_sysdate   
    ---------------------
     2023-06-20 20:09:02
    (1 row)
    
  • timeofday()

    描述:返回当前函数被调用时的系统时间的时间时间戳(像clock_timestamp,但是返回时为text)。

    返回值类型:text

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT timeofday();
                  timeofday              
    -------------------------------------
     Fri Sep 01 17:05:01.167506 2017  CS T
    (1 row)
    
  • transaction_timestamp()

    描述:当前事务开始的系统的日期及时间。

    返回值类型:timestamp with time zone

    示例:

    1
    2
    3
    4
    5
    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

    示例:

    1
    2
    3
    4
    5
    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)
    
    此函数在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下:
    • 当计算结果大于公元9999年时会报错。
    • 参数n入参若为小数则不会被四舍五入,而是被截断。
  • last_day(d)

    描述:用于计算时间点d当月最后一天的时间。

    返回值类型:timestamp

    示例:

    1
    2
    3
    4
    5
    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)
    
support.huaweicloud.com/centralized-devg-v3-gaussdb/gaussdb-12-0345.html