Postgresql 获取当前时间

 Postgresql 当中有四种方式获取当前时间。
 一:now()
     通过now()获取的时间是最完整的时间,包括时区,秒也保留到了6位小数。
     select now();
     得到的结果如下
     '2014-12-24 09:28:31.545145+08'

 二:current_timestamp效果是和now()一样的。

 三:current_time 
      只显示当前的时间,不包括日期
      select current_time;
      得到的结果如下
      '09:32:02.039705+08'

 四:current_date
       只显示当前的日期,不包括小时等信息
       select current_date;
       得到的结果如下
       '2014-12-24'

 我们还可以控制now()的返回格式,如下
  select now()::timestamp(0)without time zone;(current_timestamp 是和now()一样的)
 
 时间的计算方式,如下
 select now() + interval '10 min/year/month/day/hour/sec/ (1 year 1 month 1 day 1 hour 1 min 1 sec)'  

2.时间格式转换

2.1.unix时间和时间戳转换

unix时间 转 时间戳

-- unix时间戳一般是10位,如果遇到13位的情况需要除1000;
-- 末尾+1表示多1秒,例如1681574401为2023-04-16 00:00:02,也就是说两个unix时间的差值数字,表示差的秒数
select to_timestamp(1681574401);

时间戳 转 unix时间

select  extract(epoch from '2023-04-16 00:00:01'::timestamp);
select  extract(epoch from '2023-04-16 00:00:01'::timestamp) - 28800;

2.2.时间戳和日期转换

时间戳转日期

select '2023-04-16 00:00:01'::date;
select date('2023-04-16 00:00:01');

日期转时间戳

select '2023-04-16 00:00:01'::timestamp;

2.3.日期和文本之间转换

日期转文本:

-- 使用to_char函数
select to_char('2023-04-16'::date,'yyyymmdd');
-- 直接用文本截断
select substr('2023-04-16'::date,1,4)||substr('2023-04-16'::date,6,2)||substr('2023-04-16'::date,9,2);

文本转日期:

select '20230416'::date;
select cast('20230416' as date );

3.取日期的周、月、季、年

-- 获取年:返回2023
SELECT EXTRACT (year FROM '20230416'::date);

-- 获取季度:返回2023年2季度
SELECT (EXTRACT (year FROM '20230416'::date))||'年'||(extract (quarter FROM '20230416'::date))||'季度';

-- 获取月份:返回2023年4月
SELECT (EXTRACT (year FROM '20230416'::date))||'年'||(extract (month FROM '20230416'::date))||'月';

-- 获取周:返回14
SELECT EXTRACT (week FROM '20230416'::date);

-- 获取周中的周几:返回7
SELECT EXTRACT (isodow FROM '20230416'::date);

-- 不同日期聚合到当周周1:如下三个都返回2023-04-10
select '20230410'::date - (EXTRACT (isodow FROM '20230410'::date))::integer + 1;
select '20230414'::date - (EXTRACT (isodow FROM '20230414'::date))::integer + 1;
select '20230416'::date - (EXTRACT (isodow FROM '20230416'::date))::integer + 1;

4.相对时间获取

-- 取前1天:返回20230415
select '20230416'::date - interval '1 day';

-- 取前1周:返回20230409
select '20230416'::date - interval '1 week';

-- 取前1月:返回20230316
select '20230416'::date - interval '1 month';

-- 取前1年:返回20220416
select '20230416'::date - interval '1 month';

5.时间差计算

-- 天:返回1
select '20230416'::date - '20230415'::date;

-- 时分秒:可以转为unix时间计算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值