请选择 进入手机版 | 继续访问电脑版

pgsql的一些常用的时间相关的内置函数

[复制链接]
苍野狼步 发表于 2021-1-2 19:43:19 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
pgsql的一些常用的时间相关的内置函数:
  1. -- 1.时间相关-- 1.1 根本时间-- 1.1.1 完整时间(日期+时间)select CURRENT_TIMESTAMP; --2021-01-01 12:00:14.654607+08select now(); -- 2021-01-01 12:09:09.433443+08-- 1.1.2 日期select current_date; -- 2021-01-01-- 1.1.3 时间select current_time; -- 12:00:14.631598+08-- 1.1.4 当地时间日期SELECT localtime; -- 当地时间。 12:00:00.653848SELECT localtimestamp; --当地日期时间 2021-01-01 12:01:03.287146-- 1.2 日期盘算(使用 interval 关键字举行时间加减,interval 也可以不写(最好写上,有时候减法似乎会有问题))-- 1.2.1 年: years year y YSELECT now();select now() + interval '2 years'; --2023-01-01 17:05:12.478947+08select now() + interval '2years';select now() + interval '2 y'; select now() + interval '2 Y'; select now() - interval '2 y';-- 1.2.2 月 month M (注意小写m是分钟)select now() + interval '1 month';select now() + interval '1 m';-- 1.2.3 日 dayselect now() + interval '1 day';select now() + interval '1 d';select now() + interval '1 days';-- 1.2.4 周 week wselect now() + interval '1 week';select now() + interval '1 w';-- 1.2.5 小时 hourselect now() + interval '1 hour';select now() + interval '1 h';-- 1.2.6 分钟 minute mselect now() + interval '1 minute';select now() + interval '1 m';-- 1.2.7 秒 second sselect now();select now() + interval '1 second';select now() + interval '1 s';-- 1.2.8 省略intervalselect now();select now() +  '1 second';select now() +  '1 s';-- 1.3 盘算两个时间差 age(timestamp, timestamp)select now();select age(now(), now() +  '1 h');select age(now(), now() +  '1 d');select age(now(), now() +  '1 MONTH');select age(now(), now() +  '1 y');select age(now(), now() - INTERVAL '1 y');-- select age(now(), now() -  '1 y');  -- ERROR:  invalid input syntax for type timestamp with time zone: "1 y"select age(now(), timestamp '1997-05-06');select age(timestamp '1997-05-06');select age(timestamp '1970-01-01');-- 1.4 时间字段的截取 (https://blog.qdac.cc/?p=70 , https://www.runoob.com/postgresql/postgresql-datetime.html ,http://www.postgres.cn/docs/9.4/functions-datetime.html)-- 1.4.1 EXTRACT(field FROM source)   提取:field体现取的时间对象(年,月,日,小时等值),source 体现取的日期泉源,范例为 timestamp、time 或 interval。select extract(year from now());select extract(month from now());select extract(day from now());select extract(hour from now());select extract(minute from now());select extract(second from now());select extract(hour from now());select extract(hour from now());-- 查察本日是一年中的第几天 day of yearselect extract(doy from now());select extract(doy from date '2020-12-31');--每周的星期号,星期天(0)到星期六(6)select extract(dow from now()); -- 5-- 查察现在距1970-01-01 00:00:00 UTC 的秒数select extract(epoch from now());-- 把epoch 值转换回时间戳SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 1369755555 * INTERVAL '1 second'; -- 1.4.2 date_part('field',source) 获取子域(等效于extract);select date_part('hour',now());SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40');-- 1.4.3 date_trunc('field',source) 截断成指定的精度,不要的都置为0SELECT date_trunc('hour', timestamp '2001-02-16 20:38:40');SELECT date_trunc('day', TIMESTAMP '2001-02-16 20:38:40');-- 1.4.4 isfinite(date) 测试是否为有穷日期(不是 +/-无穷) ,返回true 大概false,不会用-- infinite adj. 无限的,无穷的SELECT isfinite(date '2001-02-16');SELECT isfinite(date '0000-02-16');-- 1.4.5 justify_days(interval) 按照每月 30 天调解时间隔断-- justify 使划一SELECT justify_days(interval '35 days');  -- 1 mon 5 daysSELECT justify_hours(interval '25 h'); --1 day 01:00:00 -- 使用justify_days和justify_hours调解时间隔断的同时举行正负号调解SELECT justify_interval(interval '1 mon -1 hour'); --29 days 23:00:00 -- 1.4.6 构造日期 make_date(year int, month int, day int)select make_date(2013, 7, 15);select make_interval(days := 10);select make_time(8, 15, 23.5);-- 1.4.7  timeofday() 与clock_timestamp相同,但效果是一个text 字符串;select clock_timestamp();SELECT timeofday();-- 1.5 日期转文本 https://blog.csdn.net/snn1410/article/details/7741283 -- 模式        形貌-- HH        一天的小时数(01-12)-- HH12        一天的小时数(01-12)-- HH24        一天的小时数(00-23)-- MI        分钟(00-59)-- SS        秒(00-59)-- MS        毫秒(000-999)-- US        微秒(000000-999999)-- AM        正午标识(大写)-- Y,YYY        带逗号的年(4和更多位)-- YYYY        年(4和更多位)-- YYY        年的后三位-- YY        年的后两位-- Y        年的最后一位-- MONTH        全长大写月份名(空缺填充为9字符)-- Month        全长混淆巨细写月份名(空缺填充为9字符)-- month        全长小写月份名(空缺填充为9字符)-- MON        大写缩写月份名(3字符)-- Mon        缩写混淆巨细写月份名(3字符)-- mon        小写缩写月份名(3字符)-- MM        月份号(01-12)-- DAY        全长大写日期名(空缺填充为9字符)-- Day        全长混淆巨细写日期名(空缺填充为9字符)-- day        全长小写日期名(空缺填充为9字符)-- DY        缩写大写日期名(3字符)-- Dy        缩写混淆巨细写日期名(3字符)-- dy        缩写小写日期名(3字符)-- DDD        一年里的日子(001-366)-- DD        一个月里的日子(01-31)-- D        一周里的日子(1-7;周日是1)-- W        一个月里的周数(1-5)(第一周从该月第一天开始)-- WW        一年里的周数(1-53)(第一周从该年的第一天开始)-- 注意这里不区分巨细写select to_char(current_date,'yyyy');select to_char(current_date,'y'); -- 年的最后一位select to_char(current_date,'yy');select to_char(current_date,'yyy');SELECT to_char(current_date - interval '1 day','yyyy-MM-dd');SELECT now();SELECT to_char(now(),'YYYY-MM-DD HH24:MI:SS'); -- MM 月份,MI 分钟,SS 分钟,MS 毫秒SELECT to_char(now(),'yyyy-mm-dd hh24:mi:ss');SELECT to_char(now(),'YYYY-MM-DD HH24:MM:SS.MS');SELECT to_char(now(),'YYYY-MM-DD HH:MI:SS'); -- HH24 24 小时制,HH 12小时制-- 注意这里区分巨细写 !!SELECT to_char(now(),'MONTH'); -- 全长大写月份名(空缺填充为9字符) JANUARY  SELECT to_char(now(),'Month'); -- January  SELECT to_char(now(),'month'); -- 全长小写月份名(空缺填充为9字符) january  -- DDD        一年里的日子(001-366)-- DD        一个月里的日子(01-31)-- D        一周里的日子(1-7;周日是1)-- W        一个月里的周数(1-5)(第一周从该月第一天开始)-- WW        一年里的周数(1-53)(第一周从该年的第一天开始)SELECT to_char(now(),'DDD'); -- 001
复制代码
参考:


来源:https://blog.csdn.net/weixin_41287260/article/details/112079459
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )