600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > pg数据库生成随机时间_postgresql 时区与时间函数-阿里云开发者社区

pg数据库生成随机时间_postgresql 时区与时间函数-阿里云开发者社区

时间:2021-02-08 05:15:42

相关推荐

pg数据库生成随机时间_postgresql 时区与时间函数-阿里云开发者社区

postgresql 时区与时间函数

rudygao

-02-03

1951浏览量

简介:

--把时间戳转成epoch值

postgres=# select extract(epoch from now());

date_part

------------------

1447898857.74524

(1 row)

--把epoch 值转换回时

--把时间戳转成epoch值

postgres=# select extract(epoch from now());

date_part

------------------

1447898857.74524

(1 row)

--把epoch 值转换回时间戳

postgres=# SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 1447898857.74524 * INTERVAL '1 second';

?column?

------------------------------

-11-19 10:07:37.74524+08

postgres=# SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 1447898857.74524 * INTERVAL '1 second';

?column?

------------------------------

-11-19 10:07:37.74524+08

--查看当前的时间戳

postgres=# select clock_timestamp(),current_timestamp,localtimestamp;

clock_timestamp | now | timestamp

-------------------------------+-------------------------------+----------------------------

-02-02 17:54:15.547194+08 | -02-02 17:54:15.546956+08 | -02-02 17:54:15.546956

--时间加减

postgres=# select date '-02-02 10:00:00'+ interval '10 minutes';

?column?

---------------------

-02-02 00:10:00

--直接用sql生成随机日期时间

select '-5-1'::date + trunc(random()*100)::integer +' 00:22:22'::time + (trunc(random()*3600*24)||' second')::interval;

--不同时区之间的转换

postgres=# select '-02-03 09:07:30.816885+08' at time zone 'pst';

timezone

----------------------------

-02-02 17:07:30.816885

(1 row)

postgres=# select '-02-03 09:07:30.816885+08' at time zone 'cct';

timezone

----------------------------

-02-03 09:07:30.816885

(1 row)

postgres=# SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'cct';

timezone

---------------------

2001-02-17 09:38:40

--查看系统支持的时区

select * from pg_timezone_names ;

--时区设置参数

timezone = 'PRC'

--修改时区的方法

1. 全局参数

postgresql.conf

timezone='UTC'

2. 数据库级配置

alter database dbname set timezone='UTC';

pipeline=# select * from pg_db_role_setting ;

setdatabase | setrole | setconfig

-------------+---------+--------------------------------------

14930 | 0 | {TimeZone=UTC}

3. 用户级配置

alter role rolname set timezone='UTC';

或者

alter role all set timezone='UTC';

pipeline=# select * from pg_db_role_setting ;

setdatabase | setrole | setconfig

-------------+---------+--------------------------------------

14930 | 0 | {TimeZone=UTC}

0 | 0 | {TimeZone=UTC}

--创建随机日期时间函数

CREATE OR REPLACE FUNCTION rand_date_time(start_date date, end_date date) RETURNS TIMESTAMP AS

$BODY$

DECLARE

interval_days integer;

random_seconds integer;

random_dates integer;

random_date date;

random_time time;

BEGIN

interval_days := end_date - start_date;

random_dates:= trunc(random()*interval_days);

random_date := start_date + random_dates;

random_seconds:= trunc(random()*3600*24);

random_time:=' 00:00:00'::time+(random_seconds || ' second')::INTERVAL;

RETURN random_date +random_time;

END;

$BODY$

LANGUAGE plpgsql;

--生成指定时间内的随机时间

SELECT rand_date_time('2000-01-01', '-12-31');

--休眠1.5秒后执行,单位秒

SELECT clock_timestamp(),pg_sleep(1.5),clock_timestamp();

--休眠5分钟,单位interval

SELECT clock_timestamp(),pg_sleep_for('5 minutes'),clock_timestamp();

--到指定时间执行,注意这些休眠时间不是完全精确的

SELECT clock_timestamp(),pg_sleep_until('today 10:00'),clock_timestamp();

关系型数据库

PostgreSQL

数据库

SQL

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。