首页 | 联系我们 | 叶凡网络官方QQ群:323842844
游客,欢迎您! 请登录 免费注册 忘记密码
您所在的位置:首页 > 开发语言 > DataBase > 正文

使用PostgreSQL数据库日期类型的4个提示

作者:cocomyyz 来源: 日期:2013-10-12 9:15:12 人气:0 加入收藏 评论:0 标签:

当我们这些使用Rails的人看到例如5.weeks.from_nowor3.days.ago + 2.hours时并不会感到惊讶。同样,PostgreSQL也可以做到,你可以通过简单调用PostgreSQL内置函数来实现相同的功能。

当前时间/日期/时间戳

获取当前时间的方式有很多种,在这之前我们需要知道以下两种类型的区别:

  1. 总是返回当前的值 (clock_timestamp())

  2. 总是返回当前值,但在事务中它返回的是事务开始的时间(now())

让我们看下面这个例子

  1. postgres=# BEGIN;  

  2. postgres=# Select now();  

  3.              now  

  4. -------------------------------

  5. 2013-08-26 12:17:43.182331+02  


  6. postgres=# Select now();  

  7.              now  

  8. -------------------------------

  9. 2013-08-26 12:17:43.182331+02  


  10. postgres=# Select clock_timestamp();  

  11.        clock_timestamp  

  12. -------------------------------

  13. 2013-08-26 12:17:50.698413+02  


  14. postgres=# Select clock_timestamp();  

  15.        clock_timestamp  

  16. -------------------------------

  17. 2013-08-26 12:17:51.123905+02  

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

时间区间:比如3天前

使用interval操作符你可以轻松的构建一个时间区间,例如

  • interval '1 day'

  • interval '5 days'

  • interval '5 days' + interval '3 hours'

  • interval '5 days 3 hours'

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

  1. postgres=# Select now() - interval '3 days';  

  2.           ?column?  

  3. -------------------------------

  4. 2013-08-23 12:23:40.069717+02  

获取星期几

有些时候对于一个给定的时间,你仅仅只想知道的是这天是星期几或者是它属于那个世纪的更或者你只想知道它是一年中的第几天。PostgreSQL中的extract()函数提供了这种功能。

如下例子是在8月26日 星期一进行测试的。

  1. postgres=# Select extract(DAY FROM now());  

  2. date_part  

  3. -----------

  4.        26  


  5. postgres=# Select extract(DOW FROM now());  

  6. date_part  

  7. -----------

  8.         1  

extract()还有其他更强大的功能,详情请参阅官方文档,在这里只列举了一小部分:

  • day

  • century

  • dow(day of week)

  • doy(day of year)

  • minute

  • month

  • year

时区转换

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

  1. postgres=# BEGIN;  

  2. BEGIN

  3. postgres=# Select now();  

  4.              now  

  5. -------------------------------

  6. 2013-08-26 12:39:39.122218+02  


  7. postgres=# Select now() AT TIME ZONE 'GMT';  

  8.          timezone  

  9. ----------------------------

  10. 2013-08-26 10:39:39.122218  


  11. postgres=# Select now() AT TIME ZONE 'GMT+1';  

  12.          timezone  

  13. ----------------------------

  14. 2013-08-26 09:39:39.122218  


  15. postgres=# Select now() AT TIME ZONE 'PST';  

  16.          timezone  

  17. ----------------------------

  18. 2013-08-26 02:39:39.122218  

英文原文:4 Tips for Working with Dates in PostgreSQL

译文链接:http://www.oschina.net/translate/4-tips-for-working-with-dates-in-postgresql


本文网址:http://www.mingyangnet.com/html/database/352.html
读完这篇文章后,您心情如何?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
更多>>网友评论
发表评论
编辑推荐
  • 没有资料