postgresql----时间类型
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(timestamp, timestamp) | 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(text, timestamp) | 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('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(text, interval) | double precision | 功能同上,只是第二个入参为时间间隔 | select date_part('hour',interval'1 day 13:00:12'); | 13 |
date_trunc(text, timestamp) | timestamp |
将时间戳截断成指定的精度, 指定精度后面的子域用0补充 |
select date_trunc('hour', timestamp'2016-07-08 22:30:33'); |
2016-07-08 22:00:00 |
date_trunc(text, interval) | 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(text, timestamp) | select extract(hour from timestamp'2016-07-08 22:30:29'); | 22 |
extract (field from interval)
|
double precision | 功能同date_part(text, interval) | 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 int, month int, day 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 int, month int, day int, hour 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 int, hour int, min int, sec 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----时间类型相关推荐
- 【postgreSQL】时间类型模糊查询
关键代码 全部模糊查询,%直接用是在文本类型数据上,时间类型不行.转换一下进行查询 WHERE (TO_CHAR("c_statistic_time", 'hh24:mi:ss') ...
- MySQL 学习笔记(12)— 数据类型(定长字符、变长字符、字符串大对象、数字类型、日期时间类型、二进制类型)
MySQL 常见的数据类型有字符串类型.数字类型.时间类型.二进制类型.具体的分类如下图: 1. 字符串类型 字符串类型用于存储字符和字符串数据,主要包含三种具体的类型:定长字符串.变长字符串以及字符 ...
- pg日期转周_PostgreSQL 日期/时间类型
时区和时区习惯不仅仅受地球几何形状的影响,还受到政治决定的影响.到了 19 世纪,全球的时区变得稍微标准化了些,但是还是易于遭受随意的修改,部分是因为夏时制规则.PostgreSQL 目前支持 190 ...
- PostgreSQL字段类型说明
0. 常用字段类型 BIGSERIAL SERIAL8 存储自动递增的惟一整数,最多 8 字节. BIT 固定长度的位串. BIT VARYING(n) VARBIT(n) 可变长度的位串,长度 ...
- mysql 日期_「5」学习MySQL日期与时间类型发现:要养成注重细节的习惯
在前面的学习中我们提到过字段类型这个概念,本篇的主题就是来讲一种常用而相对复杂的类型:日期与时间. MySQL中表示日期与时间的数据类型有很多种,但主要的不外乎下面五种: 记住上面表中的"范 ...
- pandas数据预处理(标准化归一化、离散化/分箱/分桶、分类数据处理、时间类型数据处理、样本类别分布不均衡数据处理、数据抽样)
1. 数值型数据的处理 1.1 标准化&归一化 数据标准化是一个常用的数据预处理操作,目的是处理不同规模和量纲的数据,使其缩放到相同的数据区间和范围,以减少规模.特征.分布差异等对模型的影响. ...
- 数据库中数据类型和约束(整数类型、字符串、时间类型)
数据库中的数据保存在数据表中,在表中为了更加准确的存储数据,保证数据的正确有效,可以在创建表的时候,为表添加一些强制性的验证,比如:数据类型和约束. 数据类型和约束保证了表中数据的准确性和完整性 1. ...
- PHPExcel对于Excel中日期和时间类型的处理
PHPExcel是一款优秀的处理Excel文件读写的开源PHP Library,能够给我们提供强大的Excel读写能力,本文针对Excel处理过程中关于日期和时间类型的处理进行深入的讨论.PHPExc ...
- MongoDB时间类型
mongdb时间类型 Date() 显示当前的时间 new Date 构建一个格林尼治时间 可以看到正好和Date()相差8小时,我们是+8时区,也就是时差相差8,所以+8小时就是系统当前时间 I ...
- mysql中所有时间类型_MySQL 中的日期时间类型
INSERT INTO todo (title,created_on) VALUES ('blah','2019-09-31'); ERROR 1292 (22007): Incorrect date ...
最新文章
- 这些让人抓狂的烂代码,你碰到几种?
- JetBrain常用快捷键+省略输入方式
- 程序显示文本框_C++入门到精通(二),编写我们自己的Hello World程序
- Nhibernate教程2(3)
- Jira更换mysql数据库_JIRA6.0更换数据库到MYSQL
- [react] react中除了在构造函数中绑定this,还有别的方式吗?
- Java中的Switch都支持String了,为什么不支持long?
- 摩根士丹利 Morgan Stanley 2008校园招聘已经正式开
- redhat 7 防火墙配置
- XNA Game Studio 2.0安装问题,崩溃了
- php架构师都会有什么面试题,PHP架构师面试题目和答案
- tcp的time wait为什么要等2个MSL
- AI 研究助力体育分析
- Android 5.0系统特性全解析
- 快速缓解过敏的简单技巧
- 云图-CADViewerX 7.X OCX
- E站账号cookie分享_关于亚马逊账买手账号的分类
- css----BFC,IFC,GFC,FFC的区别
- mac删除自带的abc输入法
- js大数字类型(超过16位)失真问题