pgsql学习笔记:函数和操作符(三)

7、时间、日期函数和操作符

__ 日期/时间操作符__


操作符
描述
例子


date + integer → date
给日期加上天数
date ‘2001-09-28’ + 7 → 2001-10-05


date + interval → timestamp
为日期添加时间间隔
date ‘2001-09-28’ + interval ‘1 hour’ → 2001-09-28 01:00:00


date + time → timestamp
在日期中添加一天中的时间
date ‘2001-09-28’ + time ‘03:00’ → 2001-09-28 03:00:00


interval + interval → interval
添加时间间隔
interval ‘1 day’ + interval ‘1 hour’ → 1 day 01:00:00


timestamp + interval → timestamp
在时间戳中添加一个时间间隔
timestamp ‘2001-09-28 01:00’ + interval ‘23 hours’ → 2001-09-29 00:00:00


time + interval → time
为时间添加时间间隔
time ‘01:00’ + interval ‘3 hours’ → 04:00:00


  • interval → interval
    取否一个时间间隔
  • interval ‘23 hours’ → -23:00:00

date - date → integer
减去日期,生成经过的天数
date ‘2001-10-01’ - date ‘2001-09-28’ → 3


date - integer → date
从日期中减去天数
date ‘2001-10-01’ - 7 → 2001-09-24


date - interval → timestamp
从日期中减去时间间隔
date ‘2001-09-28’ - interval ‘1 hour’ → 2001-09-27 23:00:00


time - time → interval
减去时间
time ‘05:00’ - time ‘03:00’ → 02:00:00


time - interval → time
从时间中减去时间间隔
time ‘05:00’ - interval ‘2 hours’ → 03:00:00


timestamp - interval → timestamp
从时间戳中减去时间间隔
timestamp ‘2001-09-28 23:00’ - interval ‘23 hours’ → 2001-09-28 00:00:00


interval - interval → interval
减去时间间隔
interval ‘1 day’ - interval ‘1 hour’ → 1 day -01:00:00


timestamp - timestamp → interval
减去时间戳(将24小时间隔转换为天,类似于justify_hours())
timestamp ‘2001-09-29 03:00’ - timestamp ‘2001-07-27 12:00’ → 63 days 15:00:00


interval * double precision → interval
将时间间隔乘以数量
interval ‘1 second’ * 900 → 00:15:00
interval ‘1 day’ * 21 → 21 days
interval ‘1 hour’ * 3.5 → 03:30:00


interval / double precision → interval
用时间间隔除以数量
interval ‘1 hour’ / 1.5 → 00:40:00


日期/时间函数


函数
描述
例子


age ( timestamp, timestamp ) → interval
减去参数,生成一个使用年和月,而不是只用日的“符号化”的结果
age(timestamp ‘2001-04-10’, timestamp ‘1957-06-13’) → 43 years 9 mons 27 days


age ( timestamp ) → interval
从 current_date 减去参数(在午夜)
age(timestamp ‘1957-06-13’) → 62 years 6 mons 10 days


clock_timestamp ( ) → timestamp with time zone
当前日期和时间(在语句执行期间变化);
clock_timestamp() → 2019-12-23 14:39:53.662522-05


current_date → date
当前日期;
current_date → 2019-12-23


current_time → time with time zone
一天中的当前时间;
current_time → 14:39:53.662522-05


current_time ( integer ) → time with time zone
一天中的当前时间;有限精度;
current_time(2) → 14:39:53.66-05


current_timestamp → timestamp with time zone
当前日期和时间 (当前事务的开始);
current_timestamp → 2019-12-23 14:39:53.662522-05


current_timestamp ( integer ) → timestamp with time zone
当前日期和时间 (当前事务的开始);有限精度;
current_timestamp(0) → 2019-12-23 14:39:53-05


date_part ( text, timestamp ) → double precision
获取时间戳字段 (等同于 extract);
date_part(‘hour’, timestamp ‘2001-02-16 20:38:40’) → 20


date_part ( text, interval ) → double precision
获取时间间隔子字段(等同于 extract);
date_part(‘month’, interval ‘2 years 3 months’) → 3


date_trunc ( text, timestamp ) → timestamp
截断到指定的精度;
date_trunc(‘hour’, timestamp ‘2001-02-16 20:38:40’) → 2001-02-16 20:00:00


date_trunc ( text, timestamp with time zone, text ) → timestamp with time zone
在规定的时区中截断到指定的精度;
date_trunc(‘day’, timestamptz ‘2001-02-16 20:38:40+00’, ‘Australia/Sydney’) → 2001-02-16 13:00:00+00


date_trunc ( text, interval ) → interval
截断到指定的精度;
date_trunc(‘hour’, interval ‘2 days 3 hours 40 minutes’) → 2 days 03:00:00


extract ( field from timestamp ) → double precision
获取时间戳子字段;
extract(hour from timestamp ‘2001-02-16 20:38:40’) → 20


extract ( field from interval ) → double precision
获取时间间隔子字段;
extract(month from interval ‘2 years 3 months’) → 3


isfinite ( date ) → boolean
测试有限日期(不是+/-无限)
isfinite(date ‘2001-02-16’) → true


isfinite ( timestamp ) → boolean
测试有限时间戳(不是+/-无限)
isfinite(timestamp ‘infinity’) → false


isfinite ( interval ) → boolean
测试有限时间间隔 (当前总是为真)
isfinite(interval ‘4 hours’) → true


justify_days ( interval ) → interval
调整间隔,使得30天时间周期表示为月
justify_days(interval ‘35 days’) → 1 mon 5 days


justify_hours ( interval ) → interval
调整时间间隔,使得24小时时间周期表示为日
justify_hours(interval ‘27 hours’) → 1 day 03:00:00


justify_interval ( interval ) → interval
使用 justify_days 和 justify_hours调整时间间隔; 通过额外的符号调整
justify_interval(interval ‘1 mon -1 hour’) → 29 days 23:00:00


localtime → time
一天中当前时间;
localtime → 14:39:53.662522


localtime ( integer ) → time
一天中的当前时间,有限精度;
localtime(0) → 14:39:53


localtimestamp → timestamp
当前日期和时间(当前事务的开始);
localtimestamp → 2019-12-23 14:39:53.662522


localtimestamp ( integer ) → timestamp
当前日期和时间(当前事务的开始);
localtimestamp(2) → 2019-12-23 14:39:53.66


make_date ( year int, month int, day int ) → date
从年、月和日字段创建日期
make_date(2013, 7, 15) → 2013-07-15


make_interval ( [ years int [, months int [, weeks int [, days int [, hours int [, mins int [, secs double precision ]]]]]]] ) → interval
从年、月、周、日、小时、分钟和秒字段创建时间间隔,每个字段默认为0
make_interval(days => 10) → 10 days


make_time ( hour int, min int, sec double precision ) → time
从小时、分钟和秒字段创建时间
make_time(8, 15, 23.5) → 08:15:23.5


make_timestamp ( year int, month int, day int, hour int, min int, sec double precision ) → timestamp
从年、月、日、小时、分钟和秒字段创建时间戳
make_timestamp(2013, 7, 15, 8, 15, 23.5) → 2013-07-15 08:15:23.5


make_timestamptz ( year int, month int, day int, hour int, min int, sec double precision [, timezone text ] ) → timestamp with time zone
从年,月,日,小时,分钟和秒字段结合时区创建时间戳;如果没有指定timezone,则使用当前时区
make_timestamptz(2013, 7, 15, 8, 15, 23.5) → 2013-07-15 08:15:23.5+01


now ( ) → timestamp with time zone
当前日期和时间(当前事务的开始);
now() → 2019-12-23 14:39:53.662522-05


statement_timestamp ( ) → timestamp with time zone
当前日期和时间(当前语句的开始);
statement_timestamp() → 2019-12-23 14:39:53.662522-05


timeofday ( ) → text
当前的日期和时间 (类似 clock_timestamp, 但是采用 text 字符串);
timeofday() → Mon Dec 23 14:39:53.662522 2019 EST


transaction_timestamp ( ) → timestamp with time zone
当前日期和时间(当前事务的开始);
transaction_timestamp() → 2019-12-23 14:39:53.662522-05


to_timestamp ( double precision ) → timestamp with time zone
将Unix纪元转换为带时区的时间戳(从1970-01-01 00:00:00+00开的的秒)
to_timestamp(1284352323) → 2010-09-13 04:32:03+00


8、延时执行

下面的这些函数可以用于让服务器进程延时执行:

pg_sleep ( double precision )
pg_sleep_for ( interval )
pg_sleep_until ( timestamp with time zone )

pg_sleep使当前会话的进程休眠,直到过去给定的秒数。可以指定几分之一秒的延迟。
pg_sleep_for是一个方便的函数,允许将睡眠时间指定为时间间隔。 pg_sleep_until是一个方便的函数,用于需要特定的唤醒时间。例如:

SELECT pg_sleep(1.5);
SELECT pg_sleep_for('5 minutes');
SELECT pg_sleep_until('tomorrow 03:00');

9、枚举支持函数


函数
描述
例子


enum_first ( anyenum ) → anyenum
返回输入枚举类型的第一个值。
enum_first(null::rainbow) → red


enum_last ( anyenum ) → anyenum
返回输入枚举类型的最后一个值。
enum_last(null::rainbow) → purple


enum_range ( anyenum ) → anyarray
将输入枚举类型的所有值作为一个有序的数组返回。
enum_range(null::rainbow) → {red,orange,yellow,​green,blue,purple}


enum_range ( anyenum, anyenum ) → anyarray
以一个数组返回在给定两个枚举值之间的范围。值必须来自相同的枚举类型。 如果第一个参数为空,其结果将从枚举类型的第一个值开始。如果第二参数为空,其结果将以枚举类型的最后一个值结束。
enum_range(‘orange’::rainbow, ‘green’::rainbow) → {orange,yellow,green}
enum_range(NULL, ‘green’::rainbow) → {red,orange,​yellow,green}
enum_range(‘orange’::rainbow, NULL) → {orange,yellow,green,​blue,purple}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值