华为云用户手册

  • next_day(x,y) 描述:用于计算x时间开始的下一个星期y的时间。 ORA和TD兼容模式下,返回值类型为timestamp。 MySQL兼容模式下,返回值类型为date。 示例: 1 2 3 4 5 SELECT next_day(TIMESTAMP '2017-05-25 00:00:00','Sunday')AS cal_result; cal_result --------------------- 2017-05-28 00:00:00 (1 row)
  • unix_timestamp([timestamp with time zone]) 描述:获取从'1970-01-01 00:00:00'UTC到入参时间经历的秒数。无入参时,指定为当前时间。 返回值类型:bigint(无入参)/numeric(有入参) 示例: 1 2 3 4 5 SELECT unix_timestamp(); unix_timestamp ---------------- 1693906219 (1 row) 1 2 3 4 5 SELECT unix_timestamp('2018-09-08 12:11:13+06'); unix_timestamp ---------------- 1536387073.000000 (1 row)
  • last_day(d) 描述:用于计算时间点d本月最后一天的时间。 ORA和TD兼容模式下,返回值类型为timestamp。 MySQL兼容模式下,返回值类型为date。 示例: 1 2 3 4 5 SELECT last_day(to_date('2017-01-01', 'YYYY-MM-DD')) AS cal_result; cal_result --------------------- 2017-01-31 00:00:00 (1 row)
  • trunc(timestamp) 描述:默认按天截取。 返回值类型:timestamp 示例: 1 2 3 4 SELECT trunc(TIMESTAMP '2001-02-16 20:38:40'); trunc --------------------- 2001-02-16 00:00:00 (1 row)
  • isfinite(timestamp) 描述:测试判断是否为有限时间。 返回值类型:boolean 示例: 1 2 3 4 5 6 7 8 9 10 SELECT isfinite(timestamp '2001-02-16 21:28:30'); isfinite ---------- t (1 row) SELECT isfinite(timestamp 'infinity'); isfinite ---------- f (1 row)
  • extract(field from interval) 描述:获取field指定精度的值。如果大于12,则取与12的模。field的有效值参见EXTRACT。 返回值类型:double precision 示例: 1 2 3 4 5 SELECT extract(month FROM interval '2 years 3 months'); date_part ----------- 3 (1 row)
  • isfinite(date) 描述:测试是否为有限日期。 返回值类型:boolean 示例: 1 2 3 4 5 6 7 8 9 10 SELECT isfinite(date '2001-02-16'); isfinite ---------- t (1 row) SELECT isfinite(date 'infinity'); isfinite ---------- f (1 row)
  • transaction_timestamp() 描述:当前日期及时间,与current_timestamp等效。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 SELECT transaction_timestamp(); transaction_timestamp ------------------------------- 2017-09-01 17:05:13.534454+08 (1 row)
  • numtodsinterval(num, interval_unit) 描述:将数字转换为interval类型。num为numeric类型数字,interval_unit为固定格式字符串('DAY' | 'HOUR' | 'MINUTE' | 'SECOND')。 可以通过设置参数IntervalStyle为oracle,兼容该函数在Oracle中的interval输出格式。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 SELECT numtodsinterval(100, 'HOUR'); numtodsinterval ----------------- 100:00:00 (1 row) SET intervalstyle = oracle; SET SELECT numtodsinterval(100, 'HOUR'); numtodsinterval ------------------------------- +000000004 04:00:00.000000000 (1 row)
  • extract(field from timestamp) 描述:获取field指定精度的值。field的有效值参见EXTRACT。 返回值类型:double precision 示例: 1 2 3 4 5 SELECT extract(hour FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 20 (1 row)
  • justify_interval(interval) 描述:结合justify_days和justify_hours,调整interval。 返回值类型:interval 示例: 1 2 3 4 5 SELECT justify_interval(interval '1 MON -1 HOUR'); justify_interval ------------------ 29 days 23:00:00 (1 row)
  • maketime(hour, minute, second) 描述:根据所给的小时,分钟和秒数返回time类型的值。由于 GaussDB (DWS)中的time类型的取值范围为00:00:00到24:00:00,故不支持hour大于24时和hour小于0时的场景。 返回值类型:time 示例: 1 2 3 4 5 SELECT maketime(12, 15, 30.12); maketime ------------- 12:15:30.12 (1 row)
  • from_unixtime(unix_timestamp[,format]) 描述:格式串缺省时,将unix时间戳转换为日期时间类型输出。格式串指定时,将unix时间戳转换为指定格式的字符串输出。 返回值类型:timestamp(格式串缺省)/ text(格式串指定) 示例: 1 2 3 4 5 6 7 8 9 10 SELECT from_unixtime(875996580); from_unixtime --------------------- 1997-10-04 20:23:00 (1 row) SELECT from_unixtime(875996580, '%Y %D %M %h:%i:%s'); from_unixtime --------------------------- 1997 4th October 08:23:00 (1 row)
  • now([fsp]) 描述:当前事务开始的日期及时间,参数确定微秒输出精度,缺省时为6。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 SELECT now(); now ------------------------------- 2017-09-01 17:03:42.549426+08 (1 row) 1 2 3 4 5 SELECT now(3); now ---------------------------- 2021-09-08 10:59:00.427+08 (1 row)
  • statement_timestamp() 描述:当前日期及时间。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 SELECT statement_timestamp(); statement_timestamp ------------------------------- 2017-09-01 17:04:39.119267+08 (1 row)
  • timeofday() 描述:当前日期及时间(像clock_timestamp,但是返回时为text。) 返回值类型:text 示例: 1 2 3 4 5 SELECT timeofday(); timeofday ------------------------------------- Fri Sep 01 17:05:01.167506 2017 CS T (1 row)
  • date_trunc(text, timestamp) 描述:截取到参数text指定的精度。 返回值类型:timestamp 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40'); date_trunc --------------------- 2001-02-16 20:00:00 (1 row) --获取去年的最后一天 SELECT date_trunc('day', date_trunc('year',CURRENT_DATE)+ '-1'); date_trunc ------------------------ 2022-12-31 00:00:00+00 (1 row) --获取今年的第一天 SELECT date_trunc('year',CURRENT_DATE); date_trunc ------------------------ 2023-01-01 00:00:00+00 (1 row) --获取去年的第一天 SELECT date_trunc('year',now() + '-1 year'); date_trunc ------------------------ 2022-01-01 00:00:00+00 (1 row)
  • timestampdiff(field, timestamp1, timestamp2) 描述:将两个日期参数相减(timestamp2 - timestamp1),并以单位field作为返回值。若相减值为负,则函数返回值为负。field支持的参数为year、month、quarter、day、week、hour、minute、second和microsecond。 返回值类型:bigint 示例: 1 2 3 4 5 SELECT timestampdiff(day, TIMESTAMP '2001-02-01', TIMESTAMP '2003-05-01 12:05:55'); timestampdiff --------------- 819 (1 row)
  • date_part(text, interval) 描述:获取参数text指定的精度。如果大于12,则取与12的模。 等效于extract(field from timestamp)。 返回值类型:double precision 示例: 1 2 3 4 5 SELECT date_part('month', interval '2 years 3 months'); date_part ----------- 3 (1 row)
  • subdate(date, interval | int) 描述:返回给定日期时间减去指定单位的时间间隔的结果; 默认单位(即第二个参数为整型时)为天数。 返回值类型:timestamp 示例: 当入参为text类型时: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 SELECT subdate('2020-11-13', 10); subdate ------------ 2020-11-03 (1 row) SELECT subdate('2020-11-13', interval '2' month); subdate ------------ 2020-09-13 (1 row) SELECT subdate('2020-11-13 12:15:16', interval '1' month); subdate --------------------- 2020-10-13 12:15:16 (1 row) SELECT subdate('2020-11-13', interval '2' minute); subdate --------------------- 2020-11-12 23:58:00 (1 row) 当入参为date类型时: 1 2 3 4 5 6 7 8 9 10 11 SELECT subdate(current_date, 10); subdate ------------ 2021-09-05 (1 row) SELECT subdate(current_date, interval '1' month); subdate --------------------- 2021-08-15 00:00:00 (1 row)
  • date_part(text, timestamp) 描述:获取参数text指定的精度。 等效于extract(field from timestamp)。 返回值类型:double precision 示例: 1 2 3 4 5 SELECT date_part('hour', TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 20 (1 row)
  • timestampadd(field, numeric, timestamp) 描述:将以单位field的整数时间间隔(秒数可以带小数)添加到日期时间表达式中。若数值为负,则表示从给定的时间日期时间表达式中减去对应的时间间隔。field支持的参数为year,month,quarter,day,week,hour,minute,second和microsecond。 返回值类型:timestamp 示例: 1 2 3 4 5 6 7 8 9 10 11 SELECT timestampadd(year, 1, TIMESTAMP '2020-2-29'); timestampadd --------------------- 2021-02-28 00:00:00 (1 row) SELECT timestampadd(second, 2.354156, TIMESTAMP '2020-11-13'); timestampadd ---------------------------- 2020-11-13 00:00:02.354156 (1 row)
  • clock_timestamp() 描述:实时时钟的当前时间戳。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 SELECT clock_timestamp(); clock_timestamp ------------------------------- 2017-09-01 16:57:36.636205+08 (1 row)
  • current_timestamp 描述:当前日期及时间。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 SELECT current_timestamp; pg_systimestamp ------------------------------ 2017-09-01 16:58:19.22173+08 (1 row)
  • age(timestamp, timestamp) 描述:将两个参数相减,并以年、月、日作为返回值。若相减值为负,则函数返回亦为负。 返回值类型:interval 示例: 1 2 3 4 5 SELECT age(TIMESTAMP '2001-04-10', TIMESTAMP '1957-06-13'); age ------------------------- 43 years 9 mons 27 days (1 row)
  • adddate(date, interval | int) 描述:返回给定日期时间加上指定单位的时间间隔的结果。默认单位(即第二个参数为整型时)为天数。 返回值类型:timestamp 示例: 当入参为text类型时: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 SELECT adddate('2020-11-13', 10); adddate ------------ 2020-11-23 (1 row) SELECT adddate('2020-11-13', interval '1' month); adddate ------------ 2020-12-13 (1 row) SELECT adddate('2020-11-13 12:15:16', interval '1' month); adddate --------------------- 2020-12-13 12:15:16 (1 row) SELECT adddate('2020-11-13', interval '1' minute); adddate --------------------- 2020-11-13 00:01:00 (1 row) 当入参为date类型时: 1 2 3 4 5 6 7 8 9 10 11 SELECT adddate(current_date, 10); adddate ------------ 2021-09-24 (1 row) SELECT adddate(date '2020-11-13', interval '1' month); adddate --------------------- 2020-12-13 00:00:00 (1 row)
  • 时间/日期操作符 用户在使用时间和日期操作符时,对应的操作数请使用明确的类型前缀修饰,以确保数据库在解析操作数的时候能够与用户预期一致,不会产生用户非预期的结果。 比如下面示例没有明确数据类型就会出现异常错误。 1 2 SELECT date '2001-10-01' - '7' AS RESULT; ERROR: invalid input syntax for type timestamp: "7" 表1 时间和日期操作符 操作符 示例 + date类型参数与integer参数相加,获取时间间隔为7天后的时间: 1 2 3 4 5 SELECT date '2001-09-28' + integer '7' AS RESULT; result --------------------- 2001-10-05 00:00:00 (1 row) date类型参数与interval参数相加,获取时间间隔为1小时后的时间: 1 2 3 4 5 SELECT date '2001-09-28' + interval '1 hour' AS RESULT; result --------------------- 2001-09-28 01:00:00 (1 row) date类型参数与time类型参数相加,获取具体的日期和时间结果: 1 2 3 4 5 SELECT date '2001-09-28' + time '03:00' AS RESULT; result --------------------- 2001-09-28 03:00:00 (1 row) date类型参数与interval参数相加,获取时间间隔为1个月的时间: date函数对于日期相加减超过月份的日期范围,会对齐到对应月份最后一天,不超过则不处理。例如:2021-01-31后一个月的日期为2021-02-31,但2月为闰月,只有28天,那么date函数会返回对齐到2月份最后一天的结果,即2021-02-28。 1 2 3 4 5 SELECT date '2021-01-31' + interval '1 month' AS RESULT; result --------------------- 2021-02-28 00:00:00 (1 row) 1 2 3 4 5 SELECT date '2021-02-28' + interval '1 month' AS RESULT; result --------------------- 2021-03-28 00:00:00 (1 row) interval参数相加,获取两个时间间隔之和: 1 2 3 4 5 SELECT interval '1 day' + interval '1 hour' AS RESULT; result ---------------- 1 day 01:00:00 (1 row) timestamp时间类型参数与interval参数相加,获取间隔23小时后的时间: 1 2 3 4 5 SELECT timestamp '2001-09-28 01:00' + interval '23 hours' AS RESULT; result --------------------- 2001-09-29 00:00:00 (1 row) time类型参数与interval参数相加,获取间隔时间为3小时后的时间: 1 2 3 4 5 SELECT time '01:00' + interval '3 hours' AS RESULT; result ---------- 04:00:00 (1 row) - date类型参数相减,获取两个日期的时间差: 1 2 3 4 5 SELECT date '2001-10-01' - date '2001-09-28' AS RESULT; result -------- 3 days (1 row) date类型参数与integer参数相减,返回timestamp类型,获取两者的时间差: 1 2 3 4 5 SELECT date '2001-10-01' - integer '7' AS RESULT; result --------------------- 2001-09-24 00:00:00 (1 row) date类型参数与interval参数相减,获取两者的日期、时间差: 1 2 3 4 5 SELECT date '2001-09-28' - interval '1 hour' AS RESULT; result --------------------- 2001-09-27 23:00:00 (1 row) time类型参数相减,获取两参数的时间差: 1 2 3 4 5 SELECT time '05:00' - time '03:00' AS RESULT; result ---------- 02:00:00 (1 row) time类型参数与interval相减,获取两参数的时间差: 1 2 3 4 5 SELECT time '05:00' - interval '2 hours' AS RESULT; result ---------- 03:00:00 (1 row) timestamp类型参数与interval相减,从时间戳中减去时间间隔,获取两者的日期时间差: 1 2 3 4 5 SELECT timestamp '2001-09-28 23:00' - interval '23 hours' AS RESULT; result --------------------- 2001-09-28 00:00:00 (1 row) interval参数相减,获取两者的时间差: 1 2 3 4 5 SELECT interval '1 day' - interval '1 hour' AS RESULT; result ---------- 23:00:00 (1 row) timestamp类型参数相减,获取两者的日期时间差: 1 2 3 4 5 SELECT timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00' AS RESULT; result ---------------- 1 day 15:00:00 (1 row) 获取当前日期的前一天: 1 2 3 4 5 SELECT now() - interval '1 day'AS RESULT; result ------------------------------- 2022-08-08 01:46:15.555406+00 (1 row) * 将时间间隔乘以数量: 1 2 3 4 5 SELECT 900 * interval '1 second' AS RESULT; result ---------- 00:15:00 (1 row) 1 2 3 4 5 SELECT 21 * interval '1 day' AS RESULT; result --------- 21 days (1 row) 1 2 3 4 5 SELECT double precision '3.5' * interval '1 hour' AS RESULT; result ---------- 03:30:00 (1 row) / 用时间间隔除以数量,获取一段时间中的某一段: 1 2 3 4 5 SELECT interval '1 hour' / double precision '1.5' AS RESULT; result ---------- 00:40:00 (1 row) 父主题: 时间、日期处理函数和操作符
  • round(double precision or numeric) 描述:离输入参数最近的整数。 返回值类型:与输入相同。 示例: 1 2 3 4 5 6 7 8 9 10 11 SELECT round(42.4); round ------- 42 (1 row) SELECT round(42.6); round ------- 43 (1 row) 当调用round函数时,数值类型将向零舍入,而(在大多数计算机上) 实数和双精度型则以最接近的偶数为结果。
  • width_bucket(operand numeric, b1 numeric, b2 numeric, count int) 描述:设定分组范围的最小值、最大值和分组个数,构建指定个数的大小相同的分组,返回指定字段值落入的分组编号。b1为分组范围的最小值,b2为分组范围的最大值,count为分组的个数。 返回值类型:integer 示例: 1 2 3 4 5 SELECT width_bucket(5.35, 0.024, 10.06, 5); width_bucket -------------- 3 (1 row)
  • width_bucket(op double precision, b1 double precision, b2 double precision, count int) 描述:设定分组范围的最小值、最大值和分组个数,构建指定个数的大小相同的分组,返回指定字段值落入的分组编号。b1为分组范围的最小值,b2为分组范围的最大值,count为分组的个数。 返回值类型:integer 示例: 1 2 3 4 5 SELECT width_bucket(5.35, 0.024, 10.06, 5); width_bucket -------------- 3 (1 row)
共100000条