postgresql 保留七天内的数据

delete from  表名  where date_created <(now()-interval '7 day')

保留七天以内的数据


select now();        --2013-11-28 16:20:25.259715+08
select current_timestamp --2013-11-28 16:20:38.815466+08
select current_date ;     --2013-11-28
select current_time ;     --16:21:08.981171+08
select now()+interval '2 day' ; --2013-11-30 16:21:47.610118+08 2天后
select now()-interval '2 day' ; --2013-11-26 16:22:03.390593+08 2天前
select now()+interval '2 hour' ; --2013-11-28 18:22:14.578733+08 2小时后
interval可以不写,其值可以是
1
2
3
4
5
6
7
-- Abbreviation   Meaning
-- Y           Years
-- M           Months (in the date part)
-- W          Weeks
-- D           Days
-- H           Hours
-- M        Minutes (in the time part)

时间的截取 
--使用extract extract(interval,timestamp);

1
2
select extract( year from now());    --2013
select extract(mon from now());     --5月份

时间的转换

1
2
3
4
select timestamp '2012-05-12 18:54:54' ;         --2012-05-12 18:54:54
select date '2012-05-12 18:54:54' ;            --2012-05-12
select time '2012-05-12 18:54:54' ;           --18:54:54
select TIMESTAMP WITH TIME ZONE '2012-05-12 18:54:54'  --2012-05-12 18:54:54+08

与unix时间戳的转换

1
2
SELECT TIMESTAMP 'epoch' + 1341174767 * INTERVAL '1 second' ;
--2012-07-01 20:32:47

实例
1.当前时间/日期/时间戳
获取当前时间的方式有很多种,在这之前我们需要知道以下两种类型的区别:
总是返回当前的值 (clock_timestamp())
总是返回当前值,但在事务中它返回的是事务开始的时间(now())
让我们看下面这个例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
postgres=# BEGIN ;
postgres=# SELECT now();
        now
-------------------------------
  2013-08-26 12:17:43.182331+02
  
postgres=# SELECT now();
        now
-------------------------------
  2013-08-26 12:17:43.182331+02
  
postgres=# SELECT clock_timestamp();
     clock_timestamp
-------------------------------
  2013-08-26 12:17:50.698413+02
  
postgres=# SELECT clock_timestamp();
     clock_timestamp
-------------------------------
  2013-08-26 12:17:51.123905+02

你会发现,语句执行时候clock_timestamp()的返回值每次都发生了改变,但是now()总是返回相同的值。当你需要考虑时区时,你应该特别注意这两个函数差异。

2.时间区间:比如3天前
使用interval操作符你可以轻松的构建一个时间区间,例如

1
2
3
4
interval '1 day'
interval '5 days'
interval '5 days' + interval '3 hours'
interval '5 days 3 hours'

你可以看到,我们可以用interval操作符来简单的进行数学运算,这特别适合于构建例如3天前这样的时间区间,比如:

1
2
3
4
postgres=# SELECT now() - interval '3 days' ;
       ? column ?
-------------------------------
  2013-08-23 12:23:40.069717+02

3.获取星期几
有些时候对于一个给定的时间,你仅仅只想知道的是这天是星期几或者是它属于那个世纪的更或者你只想知道它是一年中的第几天。PostgreSQL中的extract()函数提供了这种功能。
如下例子是在8月26日 星期一进行测试的。

1
2
3
4
5
6
7
8
9
postgres=# SELECT extract( DAY FROM now());
  date_part
-----------
     26
  
postgres=# SELECT extract(DOW FROM now());
  date_part
-----------
      1  

4.时区转换
有些时候,时区转换对于特定时间在不同时区显示特别有用。AT TIME ZONE提供了这种功能,它是如何做到的?我们将在一个事务中进行演示,因为同一事务中now()函数总是返回相同的值,从而我们可以很容易看到同一时间在不同时区显示的差别。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
postgres=# BEGIN ;
BEGIN
postgres=# SELECT now();
        now
-------------------------------
  2013-08-26 12:39:39.122218+02
  
postgres=# SELECT now() AT TIME ZONE 'GMT' ;
      timezone
----------------------------
  2013-08-26 10:39:39.122218
  
postgres=# SELECT now() AT TIME ZONE 'GMT+1' ;
      timezone
----------------------------
  2013-08-26 09:39:39.122218
  
postgres=# SELECT now() AT TIME ZONE 'PST' ;
      timezone
----------------------------
  2013-08-26 02:39:39.122218

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值