一个在PostgreSQL的日期和时间使用脚本教程

获得系统时间函数




现在选择();-- 2013-11-28 16:20:25.259715 + 08
选择current_timestamp;-- 2013-11-28 16:20:38.815466 + 08
选择current_date;-- 2013-11-28
选择current_time;-- 16:21:08.981171 + 08



时间的计算

利用区间




现在选择()+间隔2天;——2013-11-30 16:21:47.610118 + 08 2天后
现在选择()间隔2天;——2013-11-26 16:22:03.390593 + 08 2天前
现在选择()+间隔2小时;-- 2013-11-28 18:22:14.578733 + 08 2小时后



-间隔不能写,其值可以是


-缩写的含义
Y年
- M个月(日期部分)
w周
D日
- h
-分钟(在时间部分)




拦截时间

-使用提取提取(间隔,时间戳);




选择提取(从现在(年));2013
选择提取(从现在());5个月



时间转换




选择时间戳'2012-05-12 18:54:54;——2012-05-12 18:54:54
选择日期'2012-05-12 18:54:54;——2012-05-12
选择时间'2012-05-12 18:54:54;——18:54:54
选择时间与时区'2012-05-12 18:54:54 -- 2012-05-12 18:54:54 + 08



用unix实现时间戳的转换




选择timestamp'epoch+1341174767×间隔1秒;
——2012-07-01 20:32:47



例子

1。当前时间日期/时间戳

获取当前时间有很多方法,在此之前我们需要知道以下两种类型的差异:

总是返回当前值(clock_timestamp())

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

让我们看下面的例子


Postgres = #开始;
Postgres = #现在选择();
现在

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

Postgres = #现在选择();
现在

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

Postgres = #选择clock_timestamp();
clock_timestamp

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

Postgres = #选择clock_timestamp();
clock_timestamp

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



你会发现clock_timestamp返回值()改变每次执行语句,但现在()始终返回相同的值。当你需要考虑时区,你应该特别注意这两个函数之间的差异。

2。时间间隔:例如,3天前

使用区间运算符,您可以轻松地构建一个时间间隔,例如




间隔1天
间隔5天
间隔5天+间隔3小时
间隔5天3小时



如您所见,我们可以使用区间运算符进行简单的数学运算,尤其适用于3天前建立这样一个时间间隔,例如:




Postgres = #现在选择()间隔3天;


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



三.得到周

有时,对于一个给定的时间,你只想知道天是什么或者它属于那个世纪,或者你只想知道它是一年中的第几天。这个功能是通过提取()函数在PostgreSQL提供。

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




Postgres = #选择提取(从现在开始());
date_part

二十六

Postgres = #选择提取(道琼斯指数从现在());
date_part





4。时区转换

在某些情况下,时区转换在不同时间zone.at时区的一个特定的时间是特别有用的提供了这个功能,它是如何做的呢我们将在一个事务中演示,因为现在()函数总是在同一事务中返回相同的值,因此我们可以很容易地看到在同一时间显示的不同的差异。




Postgres = #开始;
开始
Postgres = #现在选择();
现在

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

Postgres = #现在选择()在时间zone'gmt;
时区
----------------------------
2013-08-26 10:39: 39.122218

Postgres = #现在选择()在时间zone'gmt + 1;
时区
----------------------------
2013-08-26 09:39: 39.122218

Postgres = #现在选择()在时间zone'pst;
时区
----------------------------
2013-08-26 02:39: 39.122218