postgresql支持的时间类型如下图所示:

日期 date:

建议日期的输入格式为1997-01-01,虽然也支持19970101,1/1/1997,Jan-1-1997等多种格式。

时间戳 timestamp[(p)] with(without) time zone:

其实配置文件是可以设置时区的,且做上层业务时也不会在多个时区间切换,所以一般使用无时区的时间戳就可以满足需要了。

建议时间戳的输入格式为1997-01-01 00:00:00

时间 time[(p)] with(without) time zone:

同样无时区的时间也是可以满足需要的,只表示一天的时间点,不包含日期,可以有如下格式:

12:00:00,120000,12:00

8:00 AM,8:00 PM

时间间隔 interval [fields][(p)]

我还是比较喜欢明确的时间间隔表示方法,如:

1 year 2 months 3 days 4 hours 5 minutes 6 seconds

可以用单词复数,也可以不用

test=# select interval '1 year 2 months 3 days 4 hours 5 minutes 6 seconds';interval
-------------------------------1 year 2 mons 3 days 04:05:06
(1 row)test=# select interval '2 year 2 months 3 days 4 hours 5 minutes 6 seconds';interval
--------------------------------2 years 2 mons 3 days 04:05:06
(1 row)test=# select interval '2 year 2 month 3 day 4 hour 5 minute 6 second';interval
--------------------------------2 years 2 mons 3 days 04:05:06
(1 row)

单词太复杂?记不住?

test=# select interval '1 y 2 mon 2d 12:09:12';interval
-------------------------------1 year 2 mons 2 days 12:09:12
(1 row)test=# select interval '1 y 2 mon 2d 12h 09m 12s';interval
-------------------------------1 year 2 mons 2 days 12:09:12
(1 row)

几个特殊日期和时间

以下是一些时间运算的示例:

test=# select timestamp(1) without time zone '2016-07-08 12:00:00.234';
timestamp
-----------------------
2016-07-08 12:00:00.2
(1 row)

test=# select time(1) without time zone '2016-07-08 12:00:00.234';
time
------------
12:00:00.2
(1 row)

test=# select date'2016-07-08' - 7;?column?
------------2016-07-01
(1 row)test=# select date'2016-07-08' + 7;?column?
------------2016-07-15
(1 row)test=#
test=# select date'2016-07-08' + interval'1 day 2h';?column?
---------------------2016-07-09 02:00:00
(1 row)test=# select date'2016-07-08' + time'22:00';?column?
---------------------2016-07-08 22:00:00
(1 row)test=# select interval'1day' + interval'1h';?column?
----------------1 day 01:00:00
(1 row)test=# select timestamp'2016-07-08 22:00:00' + interval'2hour';?column?
---------------------2016-07-09 00:00:00
(1 row)test=# select timestamp'2016-07-08 22:00:00' - date'2016-07-08';?column?
----------22:00:00
(1 row)test=# select 10*interval'1h';?column?
----------10:00:00
(1 row)

与格林威治时间相互转换

test=# select timestamp without time zone 'epoch';timestamp
---------------------1970-01-01 00:00:00
(1 row)test=# select timestamp without time zone 'epoch' + 3600*interval '1 sec';?column?
---------------------1970-01-01 01:00:00
(1 row)

时间函数:

函数 返回类型 描述

示例

结果
age(timestamptimestamp) interval 计算两个时间戳的时间间隔

select age(timestamp '2001-04-10',

timestamp '1957-06-13');

43 years 9 mons 27 days
age(timestamp) interval 计算current_date与入参时间戳的时间间隔

select age(timestamp

'2016-07-07 12:00:00');

12:00:00
clock_timestamp() timestamp with time zone 当前时间戳(语句执行时变化) select clock_timestamp(); 2016-07-08 15:14:04.197732-07
current_date date 当前日期 select current_date; 2016-07-08
current_time time with time zone 当前时间 select current_time; 15:15:56.394651-07
current_timestamp timestamp with time zone 当前时间戳 select current_timestamp; 2016-07-08 15:16:50.485864-07
date_part(texttimestamp) double precision 获取时间戳中的某个子域,其中text可以为year,month,day,hour,minute,second等

select

date_part('year',timestamp'2016-07-08 12:05:06'),

date_part('month',timestamp'2016-07-08 12:05:06'),

date_part('day',timestamp'2016-07-08 12:05:06'),
date_part('hour',timestamp'2016-07-08 12:05:06'),

date_part('minute',timestamp'2016-07-08 12:05:06'),

date_part('second',timestamp'2016-07-08 12:05:06');

2016 | 7 | 8 | 12 | 5 | 6

date_part(textinterval) double precision 功能同上,只是第二个入参为时间间隔 select date_part('hour',interval'1 day 13:00:12'); 13
date_trunc(texttimestamp) timestamp

将时间戳截断成指定的精度,

指定精度后面的子域用0补充

select date_trunc('hour',

timestamp'2016-07-08 22:30:33');

2016-07-08 22:00:00
date_trunc(textinterval) interval 功能同上,只是第二个入参为时间间隔 select date_trunc('hour',interval'1 year 2 mon 3 day 22:30:33'); 1 year 2 mons 3 days 22:00:00
extract(field from timestamp) double precision 功能同date_part(texttimestamp) select extract(hour from timestamp'2016-07-08 22:30:29'); 22
extract(field from interval) double precision 功能同date_part(textinterval) select extract(hour from interval'1 day 13:00:12'); 13
isfinite(date) boolean 测试是否为有穷日期 select isfinite(date'2016-07-08'),isfinite(date'infinity'); t,f
isfinite(timestamp) boolean 测试是否为有穷时间戳 select isfinite(timestamp'2016-07-08'); t
isfinite(interval) boolean 测试是否为有穷时间间隔 select isfinite(interval'1day 23:02:12'); t
justify_days(interval) interval 按照每月30天调整时间间隔 select justify_days(interval'1year 45days 23:00:00'); 1 year 1 mon 15 days 23:00:00
justify_hours(interval) interval 按照每天24小时调整时间间隔 select justify_hours(interval'1year 45days 343hour'); 1 year 59 days 07:00:00
justify_interval(interval) interval 同时使用justify_days(interval)和justify_hours(interval) select justify_interval(interval'1year 45days 343hour'); 1 year 1 mon 29 days 07:00:00
localtime time 当日时间 select localtime; 15:45:18.892224
localtimestamp timestamp 当日日期和时间 select localtimestamp; 2016-07-08 15:46:55.181583
make_date(year intmonth intday int) date 创建一个日期 select make_date(2016,7,8); 2016-07-08

make_interval(

years int DEFAULT 0,

months int DEFAULT 0,

weeks int DEFAULT 0,

days int DEFAULT 0,

hours int DEFAULT 0,

mins int DEFAULT 0,

secs double precision

DEFAULT 0.0)

interval 创建一个时间间隔 select make_interval(1,hours=>3); 1 year 03:00:00

make_time(

hour int,

min int,

sec double precision)

time 创建一个时间 select make_time(9,21,23); 09:21:23

make_timestamp(

year intmonth int,

day inthour int,

min int,

sec double precision)

timestamp 创建一个时间戳 select make_timestamp(2016,7,8,22,55,23.5); 2016-07-08 22:55:23.5

make_timestamptz(year int,

month int,

day inthour int,

min intsec double precision, [ timezone text ])

timestamp with time zone 创建一个带有时区的时间戳 select make_timestamptz(2016,7,8,22,55,23.5); 2016-07-08 22:55:23.5-07
now() timestamp with time zone 当前日期和时间 select now(); 2016-07-08 15:55:30.873537-07
statement_timestamp() timestamp with time zone 同now()  select statement_timestamp(); 2016-07-08 15:56:07.259956-07
timeofday() text

当前日期和时间,包含周几,

功能与clock_timestamp()类似

select timeofday(); Fri Jul 08 15:57:51.277239 2016 PDT
transaction_timestamp() timestamp with time zone 事务开始时的时间戳 select transaction_timestamp(); 2016-07-08 16:01:25.007153-07
to_timestamp(double precision) timestamp with time zone

Convert Unix epoch

(seconds since 1970-01-01

00:00:00+00) to timestamp

select to_timestamp(1284352323);

2010-09-12 21:32:03-07

pg_sleep(seconds double precision);  

当前会话休眠seconds秒

select pg_sleep(5);  
pg_sleep_for(interval)   当前会话休眠多长时间的间隔 select pg_sleep_for('5 seconds');  
pg_sleep_until(timestamp with time zone)   当前会话休眠至什么时间点 select pg_sleep_until('2016-07-08 23:59:59');  

转载于:https://www.cnblogs.com/alianbog/p/5654846.html

postgresql----时间类型相关推荐

  1. 【postgreSQL】时间类型模糊查询

    关键代码 全部模糊查询,%直接用是在文本类型数据上,时间类型不行.转换一下进行查询 WHERE (TO_CHAR("c_statistic_time", 'hh24:mi:ss') ...

  2. MySQL 学习笔记(12)— 数据类型(定长字符、变长字符、字符串大对象、数字类型、日期时间类型、二进制类型)

    MySQL 常见的数据类型有字符串类型.数字类型.时间类型.二进制类型.具体的分类如下图: 1. 字符串类型 字符串类型用于存储字符和字符串数据,主要包含三种具体的类型:定长字符串.变长字符串以及字符 ...

  3. pg日期转周_PostgreSQL 日期/时间类型

    时区和时区习惯不仅仅受地球几何形状的影响,还受到政治决定的影响.到了 19 世纪,全球的时区变得稍微标准化了些,但是还是易于遭受随意的修改,部分是因为夏时制规则.PostgreSQL 目前支持 190 ...

  4. PostgreSQL字段类型说明

    0. 常用字段类型 BIGSERIAL SERIAL8  存储自动递增的惟一整数,最多 8 字节. BIT  固定长度的位串. BIT VARYING(n) VARBIT(n)  可变长度的位串,长度 ...

  5. mysql 日期_「5」学习MySQL日期与时间类型发现:要养成注重细节的习惯

    在前面的学习中我们提到过字段类型这个概念,本篇的主题就是来讲一种常用而相对复杂的类型:日期与时间. MySQL中表示日期与时间的数据类型有很多种,但主要的不外乎下面五种: 记住上面表中的"范 ...

  6. pandas数据预处理(标准化归一化、离散化/分箱/分桶、分类数据处理、时间类型数据处理、样本类别分布不均衡数据处理、数据抽样)

    1. 数值型数据的处理 1.1 标准化&归一化 数据标准化是一个常用的数据预处理操作,目的是处理不同规模和量纲的数据,使其缩放到相同的数据区间和范围,以减少规模.特征.分布差异等对模型的影响. ...

  7. 数据库中数据类型和约束(整数类型、字符串、时间类型)

    数据库中的数据保存在数据表中,在表中为了更加准确的存储数据,保证数据的正确有效,可以在创建表的时候,为表添加一些强制性的验证,比如:数据类型和约束. 数据类型和约束保证了表中数据的准确性和完整性 1. ...

  8. PHPExcel对于Excel中日期和时间类型的处理

    PHPExcel是一款优秀的处理Excel文件读写的开源PHP Library,能够给我们提供强大的Excel读写能力,本文针对Excel处理过程中关于日期和时间类型的处理进行深入的讨论.PHPExc ...

  9. MongoDB时间类型

    mongdb时间类型 Date() 显示当前的时间 new Date 构建一个格林尼治时间   可以看到正好和Date()相差8小时,我们是+8时区,也就是时差相差8,所以+8小时就是系统当前时间 I ...

  10. mysql中所有时间类型_MySQL 中的日期时间类型

    INSERT INTO todo (title,created_on) VALUES ('blah','2019-09-31'); ERROR 1292 (22007): Incorrect date ...

最新文章

  1. 这些让人抓狂的烂代码,你碰到几种?
  2. JetBrain常用快捷键+省略输入方式
  3. 程序显示文本框_C++入门到精通(二),编写我们自己的Hello World程序
  4. Nhibernate教程2(3)
  5. Jira更换mysql数据库_JIRA6.0更换数据库到MYSQL
  6. [react] react中除了在构造函数中绑定this,还有别的方式吗?
  7. Java中的Switch都支持String了,为什么不支持long?
  8. 摩根士丹利 Morgan Stanley 2008校园招聘已经正式开
  9. redhat 7 防火墙配置
  10. XNA Game Studio 2.0安装问题,崩溃了
  11. php架构师都会有什么面试题,PHP架构师面试题目和答案
  12. tcp的time wait为什么要等2个MSL
  13. AI 研究助力体育分析
  14. Android 5.0系统特性全解析
  15. 快速缓解过敏的简单技巧
  16. 云图-CADViewerX 7.X OCX
  17. E站账号cookie分享_关于亚马逊账买手账号的分类
  18. css----BFC,IFC,GFC,FFC的区别
  19. mac删除自带的abc输入法
  20. js大数字类型(超过16位)失真问题

热门文章

  1. Java 需要转义的字符以及json字符串的转义
  2. scrollview滑动到某区域执行某种方法
  3. HTML5 学习准备1
  4. 用js小类库获取浏览器的高度和宽度信息
  5. DjangoForm 之创建FORM模板进行验证
  6. AOP日志组件 多次获取post参数
  7. 第11周多线程 学习总结
  8. Lua开发学习2-数据类型
  9. VueJS 组件参数名命名方式和前台显示
  10. codevs 1164 统计数字