一、Date/Time Types


参考文档:https://www.postgresql.org/docs/9.2/static/datatype-datetime.html

Types 别名 备注
timestamp [ (p) ] [ without time zone ] 日期+时间
timestamp [ (p) ] with time zone timestamptz 日期+时间
date 日期
time [ (p) ] [ without time zone ] 时间
time [ (p) ] with time zone timetz 时间
interval [ fields ] [ (p) ] 时间段

注:

1、sequelize 里常用的 DATE 类型指的是 postgres 的 timestamptz 类型

2、仅 Date 没有时区概念。

3、interval 这里不展开了,待写。

二、Date/Time Input/Output


前提:postgres 的时区设置成了 PRC(中国)。

1、普通值

例:2018-08-16 20:12:16+08

//存
INSERT INTO "public"."MemberOrderLasts"("id","mobile","last_time")
VALUES
(1,'13600000000','2018-08-16 20:12:16+08'); //取
select "last_time" from "MemberOrderLasts" where id = '1'
//2018-08-16 20:12:16.920642+08

注:对于国内程序员来说,使用“/”容易产生歧义,最好使用“-”做分隔,即 2018-08-16 20:12:16

2、特殊值

当在 SQL 命令中用作常量时,所有这些值都需要用单引号括起来。

Input String Valid Types Description
epoch date, timestamp 1970-01-01 00:00:00+00 (Unix system time zero)
infinity date, timestamp later than all other time stamps
-infinity date, timestamp earlier than all other time stamps
now date, time, timestamp current transaction's start time
today date, timestamp midnight today
tomorrow date, timestamp midnight tomorrow
yesterday date, timestamp midnight yesterday
allballs time 00:00:00.00 UTC
INSERT INTO "public"."MemberOrderLasts"("id","mobile","last_time")
VALUES
(2,'13600000000','now');

三、Date/Time TimeZone


参考我另一篇:《从 moment -> nodejs -> sequelize -> postgres,你都得设置好时区》

四、Date/Time Functions and Operators


参考文档:https://www.postgresql.org/docs/9.2/static/functions-datetime.html

1、运算符

+ / -* / / 不赘述,具体看文档)

select date '2018-01-12' + interval '7'
-- 2018-01-12 00:00:07 select "activatedAt" - "createdAt" AS "diff" from "Members" where id = '373'
-- 19 days 09:07:11.155

2、函数

Function Return Type Description Example Result
age( timestamp , timestamp ) interval Subtract arguments, producing a "symbolic" result that uses years and months age(timestamp '2001-04-10', timestamp '1957-06-13') 43 years 9 mons 27 days
age( timestamp ) interval Subtract from current_date (at midnight) age(timestamp '1957-06-13') 43 years 8 mons 3 days
date_part( text , timestamp ) double precision Get subfield (equivalent to extract); see Section 9.9.1 date_part('hour', timestamp '2001-02-16 20:38:40') 20
date_part( text , interval ) double precision Get subfield (equivalent to extract); see Section 9.9.1 date_part('month', interval '2 years 3 months') 3
date_trunc( text , timestamp ) timestamp Truncate to specified precision; see also Section 9.9.2 date_trunc('hour', timestamp '2001-02-16 20:38:40') 2001-02-16 20:00:00
extract(field from timestamp ) double precision Get subfield; see Section 9.9.1 extract(hour from timestamp '2001-02-16 20:38:40') 20
extract(field from interval ) double precision Get subfield; see Section 9.9.1 extract(month from interval '2 years 3 months') 3
isfinite( date ) boolean Test for finite date (not +/-infinity) isfinite(date '2001-02-16') true
isfinite( timestamp ) boolean Test for finite time stamp (not +/-infinity) isfinite(timestamp '2001-02-16 21:28:30') true
isfinite( interval ) boolean Test for finite interval isfinite(interval '4 hours') true
justify_days( interval ) interval Adjust interval so 30-day time periods are represented as months justify_days(interval '35 days') 1 mon 5 days
justify_hours( interval ) interval Adjust interval so 24-hour time periods are represented as days justify_hours(interval '27 hours') 1 day 03:00:00
justify_interval( interval ) interval Adjust interval using justify_days and justify_hours, with additional sign adjustments justify_interval(interval '1 mon -1 hour') 29 days 23:00:00
常用:extract / date_part 和 date_trunc 函数
1、extract / date_part
select date_part('hour', timestamp '2001-02-16 20:38:40')
-- 20
select extract('hour' from timestamp '2001-02-16 20:38:40')
-- 20 2、date_trunc
select date_trunc('hour', timestamp '2001-02-16 20:38:40')
-- 2001-02-16 20:00:00

3、查询时间是否重叠

(start1, end1) OVERLAPS (start2, end2)

(start1, length1) OVERLAPS (start2, length2)

// 一、两种用法
// 1、`(start1, end1) OVERLAPS (start2, end2)`
SELECT (DATE '2001-02-16', DATE '2001-12-21') OVERLAPS
(DATE '2001-10-30', DATE '2002-10-30');
Result: true // 2、`(start1, length1) OVERLAPS (start2, length2)`
SELECT (DATE '2001-02-16', INTERVAL '100 days') OVERLAPS
(DATE '2001-10-30', DATE '2002-10-30');
Result: false // 二、重叠判断 遵循左开右闭的原则
SELECT (DATE '2001-10-29', DATE '2001-10-30') OVERLAPS
(DATE '2001-10-30', DATE '2001-10-31');
Result: false
SELECT (DATE '2001-10-30', DATE '2001-10-30') OVERLAPS
(DATE '2001-10-30', DATE '2001-10-31');
Result: true

五、Current Date/Time


1、普通

注意:下面的日期/时间在同一个事务里都是不变的。(如果要变化,建议使用下面即将介绍的 statement_timestamp 或者 clock_timestamp )。

(1)带时区信息

CURRENT_DATE

CURRENT_TIME

CURRENT_TIMESTAMP

CURRENT_TIME(precision)

CURRENT_TIMESTAMP(precision)

还记得上面说的特殊值 now 吗,实际上跟 CURRENT_TIMESTAMP 一样:

//下面三个完全相等
SELECT CURRENT_TIMESTAMP;
SELECT TIMESTAMP 'now';
SELECT now();
(2)不带时区信息

LOCALTIME

LOCALTIMESTAMP

LOCALTIME(precision)

LOCALTIMESTAMP(precision)

仅 Date 没有时区概念。

select CURRENT_TIMESTAMP
// 2018-09-13 15:10:05.639902+08
select LOCALTIMESTAMP
// 2018-09-13 15:10:05.639902

2、事务专用

为了保障同一事务中的多个修改具有相同的时间戳,所以 postgre 提供了针对性的时间函数:

(1) transaction_timestamp() 返回事务开始的时间

其实 transaction_timestamp = CURRENT_TIMESTAMP ,只是针对的场景不同,所以换了个名字。

(2) statement_timestamp() 返回当前语句的开始时间

statement_timestamp() 和 transaction_timestamp() 只在一个事务内的第一条命令返回值相同。

(3) clock_timestamp() 返回实际的当前时间,因此即使在单个 SQL 命令中它的值也会更改

select clock_timestamp(),clock_timestamp()
-- 2020-03-05 16:59:04.264526+08 | 2020-03-05 16:59:04.264527+08 (不一样)

六、Delaying Execution


pg_sleep()让当前的会话进程休眠 seconds 秒以后再执行。

SELECT pg_sleep(1.5);

postgres Date/Time 学习笔记的更多相关文章

  1. javascript Date类型 学习笔记

    1 创建一个新的日期对象,如果不带参数,则对象自动获得当前的日期和时间 var d = new Date() 2 如果需要指定特定的日期,则可以通过Date.parse() 或者 Date().UTC ...

  2. Linux Date命令学习笔记

    date 根据给定格式显示日期或设置系统日期时间.print or set the system date and time 指令所在路径:/bin/date 命令参数: 参数 描述 -d 显示字符串 ...

  3. [原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. Android学习笔记1 android adb启动失败问题 adb server is out of date. killing...

    下面是Android的学习笔记,原文地址. 我是使用adb devices出现如下红字错误, 使用第一种方法方法,结果关掉豌豆荚就可以了. android adb启动失败问题 adb server i ...

  5. JavaScript学习笔记(十五)——对象之Date,RegExp

    在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...

  6. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  7. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  8. WeX5学习笔记

    目录 WeX5学习笔记... 1 1.轻松看透WeX5产品能力和技术... 1 2.WeX5可以怎么玩?... 3 一.纯本地App. 3 二.关联一个网站,希望默认就打开某页... 4 三.UI设计 ...

  9. Linux 学习笔记

    Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...

随机推荐

  1. JQuery/JS插件 数组转换为Table

    //数组 转换为 table var arr = [{ "D_AlarmValue": 7.00, "D_Code": "002", &qu ...

  2. 微信小程序---分包加载(subpackages)及报错

    某些情况下,开发者需要将小程序划分成不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载. 分包很简单,具体步骤如下: 在app.json中,创建subPackages,root表示分包A的 ...

  3. 2018面向对象程序设计(Java)第17周学习指导及要求

    2018面向对象程序设计(Java)第17周学习指导及要求(2018.12.20-2018.12.23)   学习目标 (1) 掌握线程同步的概念及实现技术: (2) Java线程综合编程练习 学习资 ...

  4. ExecuteReader()获得数据

    ExecuteReader用于实现只进只读的高效数据查询.ExecuteReader:返回一个SqlDataReader对象,可以通过这个对象来检查查询结果,它提供了只进只读的执行方式,即从结果中读取 ...

  5. 89. Gray Code返回位运算的所有生成值

    [抄题]: The gray code is a binary numeral system where two successive values differ in only one bit. G ...

  6. boost::asio 学习

    安装 下载-解压 指定安装目录 ./bootstrap.sh --prefix=/usr/local/boost_1_68_0 查看所有必须要编译才能使用的库 ./b2 --show-librarie ...

  7. Quartz.Net进阶之一:初识Job作业和触发器

        前几天写了一篇有关Quartz.Net入门的文章,大家感觉不过瘾,想让我在写一些比较深入的文章.其实这个东西,我也是刚入门,我也想继续深入了解一下,所以就努力看了一些资料,然后自己再整理和翻译 ...

  8. python 的面相对象编程--对应c++

    在python的面相对象编程中,我们常常在class中可以看到a(),  _b() ,  __c(), __d()__这样的函数. 由于我是看廖雪峰老师的教程,廖老师为了简单起见,没有引入太多概念,我 ...

  9. ABP框架系列之十一:(AspNet-Core-ASPNET核心)

    Introduction This document describes ASP.NET Core integration for ASP.NET Boilerplate framework. ASP ...

  10. 从中央仓库下载所想要的jar包

    中央仓库地址:https://mvnrepository.com/ 这边我搜索一个commons-logging包作为例子: 点击下面第二个绿色的comons-logging进入这个页面: 一.win ...