PostgreSQL 设置时区,时间/日期函数汇总
文章目录
- 前言
- 查看时区
- 修改时区
- 时间/日期操作符和函数
- 时间/日期操作符
- 日期/时间函数:
- extract,date_part函数支持的field
- 数据类型格式化函数
- 用于日期/时间格式化的模式:
- 扩展
前言
本文基于 PostgreSQL 12.6 版本,不同版本的函数可能存在差异。
查看版本 psql --version。
查看时区
show timezone; --UTC
select now(); -- 2023-07-24 09:22:48.589640 +00:00
视图 pg_timezone_names 保存了所有可供选择的时区
select * from pg_timezone_names;
查询 PRC 时区
select * from pg_timezone_names where name = 'PRC';

PRC是指中华人民共和国 PRC(People’s Republic of China)。
修改时区
修改时区,设置成东八区 北京时间 UTC+8,默认为session级配置
set time zone 'PRC';
select now(); -- 2023-07-24 17:21:05.086183 +08:00
修改时区,用户级配置
alter role rolname set timezone='UTC'; -- 修改指定角色时区(rolname为角色名)
alter role all set timezone='UTC'; -- 修改所有角色时区
修改时区,数据库级配置
alter database dbname set timezone='UTC'; -- dbname为数据库名称
时间/日期操作符和函数
时间/日期操作符
| 操作符 | 例子 | 返回类型 | 结果 |
|---|---|---|---|
| + | select date ‘2023-07-24’ + integer ‘7’; | date | 2023-07-31 |
| + | select date ‘2023-07-24’ + interval ‘1 hour’; | timestamp | 2023-07-24 01:00:00.000000 |
| + | select date ‘2023-07-24’ + time ‘15:16’; | timestamp | 2023-07-24 15:16:00.000000 |
| + | select interval ‘1 day’ + interval ‘1 hour’; | interval | 0 years 0 mons 1 days 1 hours 0 mins 0.0 secs |
| + | select timestamp ‘2023-07-24 15:16’ + interval ‘23 hours’; | timestamp | 2023-07-25 14:16:00.000000 |
| + | select time ‘01:00’ + interval ‘3 hours’; | time | 04:00:00 |
| - | select - interval ‘23 hours’; | interval | 0 years 0 mons 0 days -23 hours 0 mins 0.0 secs |
| - | select date ‘2023-07-24’ - date ‘2023-07-22’; | integer | 2 |
| - | select date ‘2023-07-24’ - integer ‘7’; | date | 2023-07-17 |
| - | select date ‘2023-07-24’ - interval ‘1 hour’; | timestamp | 2023-07-23 23:00:00.000000 |
| - | select time ‘05:00’ - time ‘03:00’; | interval | 0 years 0 mons 0 days 2 hours 0 mins 0.0 secs |
| - | select time ‘05:00’ - interval ‘2 hours’; | time | 03:00:00 |
| - | select timestamp ‘2023-07-24 23:00’ - interval ‘23 hours’; | timestamp | 2023-07-24 00:00:00.000000 |
| - | select interval ‘1 day’ - interval ‘1 hour’; | interval | 0 years 0 mons 1 days -1 hours 0 mins 0.0 secs |
| - | select timestamp ‘2023-07-24 03:00’ - timestamp ‘2023-07-24 12:00’; | interval | 0 years 0 mons 0 days -9 hours 0 mins 0.0 secs |
| * | select interval ‘1 hour’ * double precision ‘3.5’; | interval | 0 years 0 mons 0 days 3 hours 30 mins 0.0 secs |
| / | select interval ‘1 hour’ / double precision ‘1.5’; | interval | 0 years 0 mons 0 days 0 hours 40 mins 0.0 secs |
日期/时间函数:
| 函数 | 描述 | 例子 | 返回类型 | 结果 |
|---|---|---|---|---|
| age(timestamp, timestamp) | 第1个timestamp 减去 第2个timestamp | select age(‘2023-07-24’, ‘1997-10-26’); | interval | 25 years 8 mons 29 days 0 hours 0 mins 0.0 secs |
| age(timestamp) | 从current_date 减去 timestamp的值 | select age(timestamp ‘1997-10-26’); | interval | 25 years 8 mons 29 days 0 hours 0 mins 0.0 secs |
| current_date | 今天的日期 | select current_date; | date | 2023-07-24 |
| current_time | 现在的时间 | select current_time; | time | 07:53:43.911756 +00:00 |
| current_timestamp | 日期和时间 | select current_timestamp; | timestamp | 2023-07-24 07:54:19.495372 +00:00 |
| date_part(text, timestamp) | 获取子域(等效于extract) | select date_part(‘hour’, timestamp ‘2023-07-24 15:56:34’); | double | 15 |
| date_part(text, interval) | 获取子域(等效于extract) | select date_part(‘month’, interval ‘2 years 3 months’); | double | 3 |
| date_trunc(text, timestamp) | 截断成指定的精度 | select date_trunc(‘hour’, timestamp ‘2023-07-24 15:56:34’); | timestamp | 2023-07-24 15:00:00.000000 |
| extract(field from timestamp) | 获取子域 | select extract(hour from timestamp ‘2023-07-24 15:56:34’); | double | 15 |
| extract(field from interval) | 获取子域 | select extract(month from interval ‘2 years 3 months’); | double | 3 |
| localtime | 当前时间 | select localtime; | time | 08:00:08 |
| localtimestamp | 当前日期和时间 | select localtimestamp; | timestamp | 2023-07-24 08:05:03.650472 |
| now() | 当前的日期和时间(等效于current_timestamp) | select now(); | timestamp | 2023-07-24 08:09:30.828408 +00:00 |
| timeofday() | 当前日期和时间 | select timeofday(); | text | Mon Jul 24 08:09:51.870484 2023 UTC |
extract,date_part函数支持的field
extract,date_part 这两个函数可以从日期时间值中提取指定的部分,例如年份、月份、小时等。extract 是一个 PostgreSQL 特有的函数,而 date_part 在标准 SQL 中也有定义,但两者的功能类似。
| 域 | 描述 | 例子 | 结果 |
|---|---|---|---|
| century | 世纪 | select extract(century from timestamp ‘2023-07-24 15:56:34’); | 21 |
| day | (月份)里的日期域(1-31) | select extract(day from timestamp ‘2023-07-24 15:56:34’); | 24 |
| decade | 年份域除以10 | select extract(decade from timestamp ‘2023-07-24 15:56:34’); | 202 |
| dow | 每周的星期号(0-6;星期天是0) (仅用于timestamp) | select extract(dow from timestamp ‘2023-07-24 15:56:34’); | 1 |
| doy | 一年的第几天(1 -365/366) (仅用于 timestamp) | select extract(doy from timestamp ‘2023-07-24 15:56:34’); | 205 |
| epoch | Unix时间戳 | select extract(epoch from timestamp ‘2023-07-24 15:56:34’); | 1690214194 |
| hour | 小时域(0-23) | select extract(hour from timestamp ‘2023-07-24 15:56:34’); | 15 |
| isodow | ISO 周几(1-7,其中1代表星期一) | select extract(isodow from timestamp ‘2023-07-24 15:56:34’); | 1 |
| isoyear | ISO 年份 | select extract(isoyear from timestamp ‘2023-07-24 15:56:34’); | 2023 |
| millennium | 千年((年份/1000)+1) | select extract(millennium from timestamp ‘2023-07-24 15:56:34’); | 3 |
| microseconds | 微秒 | select extract(microseconds from TIME ‘15:56:34.5’); | 34500000 |
| millisecond | 毫秒 | select extract(millisecon from TIME ‘15:56:34.5’); | 34500 |
| minute | 分钟(0-59) | select extract(minute from timestamp ‘2023-07-24 15:56:34’); | 56 |
| month | 月份,对于timestamp数值,它是一年里的月份数(1-12);对于interval数值,它是月的数目,然后对12取模(0-11) | select extract(month from timestamp ‘2023-07-24 15:56:34’); | 7 |
| quarter | 季度,该天所在的该年的季度(1-4)(仅用于 timestamp) | select extract(quarter from timestamp ‘2023-07-24 15:56:34’); | 3 |
| second | 秒域,包括小数部分(0-59[1]) | select extract(second from timestamp ‘2023-07-24 15:56:34’); | 34 |
| week | 该天在所在的年份里是第几周。 | select extract(week from timestamp ‘2023-07-24 15:56:34’); | 30 |
| year | 年份域 | select extract(year from timestamp ‘2023-07-24 15:56:34’); | 2023 |
数据类型格式化函数
PostgreSQL格式化函数提供一套有效的工具用于把各种数据类型(日期/时间、integer、floating point和numeric)转换成格式化的字符串以及反过来从格式化的字符串转换成指定的数据类型。
to_char 函数第一个参数是待格式化的值,而第二个是定义输出或输出格式的模板。
| 函数 | 描述 | 例子 | 返回类型 | 结果 |
|---|---|---|---|---|
| to_char(timestamp, text) | 把时间戳转换成字串 | select to_char(current_timestamp, ‘HH12:MI:SS’); | text | 06:03:19 |
| to_char(interval, text) | 把时间间隔转为字串 | select to_char(interval ‘14h 6m 20s’, ‘HH24:MI:SS’); | text | 14:06:20 |
| to_date(text, text) | 把字串转换成日期 | select to_date(‘25 Jul 2023’, ‘DD Mon YYYY’); | date | 2023-07-24 |
| to_timestamp(text, text) | 把字串转换成时间戳 | select to_timestamp(‘25 Jul 2023’, ‘DD Mon YYYY’); | timestamp | 2023-07-24 00:00:00.000000 +00:00 |
| to_timestamp(double) | 把UNIX纪元转换成时间戳 | select to_timestamp(1690179888); | timestamp | 2023-07-24 06:24:48.000000 +00:00 |
用于日期/时间格式化的模式:
| 模式 | 描述 |
|---|---|
| HH | 一天的小时数(01-12) |
| HH12 | 一天的小时数(01-12) |
| HH24 | 一天的小时数(00-23) |
| MI | 分钟(00-59) |
| SS | 秒(00-59) |
| MS | 毫秒(000-999) |
| US | 微秒(000000-999999) |
| AM | 正午标识(大写) |
| Y,YYY | 带逗号的年(4和更多位) |
| YYYY | 年(4和更多位) |
| YYY | 年的后三位 |
| YY | 年的后两位 |
| Y | 年的最后一位 |
| MONTH | 全长大写月份名(空白填充为9字符) |
| Month | 全长混合大小写月份名(空白填充为9字符) |
| month | 全长小写月份名(空白填充为9字符) |
| MON | 大写缩写月份名(3字符) |
| Mon | 缩写混合大小写月份名(3字符) |
| mon | 小写缩写月份名(3字符) |
| MM | 月份号(01-12) |
| DAY | 全长大写日期名(空白填充为9字符) |
| Day | 全长混合大小写日期名(空白填充为9字符) |
| day | 全长小写日期名(空白填充为9字符) |
| DY | 缩写大写日期名(3字符) |
| Dy | 缩写混合大小写日期名(3字符) |
| dy | 缩写小写日期名(3字符) |
| DDD | 一年里的日子(001-366) |
| DD | 一个月里的日子(01-31) |
| D | 一周里的日子(1-7;周日是1) |
| W | 一个月里的周数(1-5)(第一周从该月第一天开始) |
| WW | 一年里的周数(1-53)(第一周从该年的第一天开始) |
示例:
-- 查询今天是今年的第几天
select to_char(now(), 'DDD'); -- 205
扩展
查询某个日期是否在某段日期范围,可以使用 > 和 < 判断;如果使用了 between ,则前一个日期必须小于后一个日期。
示例:
-- between 错误用法
select date '2023-07-24' between date('2023-07-25') - 1 and date('2023-07-25') - 7; -- false-- between 正确用法
select date '2023-07-24' between date('2023-07-25') - 7 and date('2023-07-25') - 1; -- true
相关文章:
PostgreSQL 设置时区,时间/日期函数汇总
文章目录 前言查看时区修改时区时间/日期操作符和函数时间/日期操作符日期/时间函数:extract,date_part函数支持的field 数据类型格式化函数用于日期/时间格式化的模式: 扩展 前言 本文基于 PostgreSQL 12.6 版本,不同版本的函数…...
性能测试Ⅱ(压力测试与负载测试详解)
协议 性能理论:并发编程 ,系统调度,调度算法 监控 压力测试与负载测试的区别是什么? 负载测试 在被测系统上持续不断的增加压力,直到性能指标(响应时间等)超过预定指标或者某种资源(CPU&内存)使用已达到饱和状…...
【Python入门系列】第十八篇:Python自然语言处理和文本挖掘
文章目录 前言一、Python常用的NLP和文本挖掘库二、Python自然语言处理和文本挖掘1、文本预处理和词频统计2、文本分类3、命名实体识别4、情感分析5、词性标注6、文本相似度计算 总结 前言 Python自然语言处理(Natural Language Processing,简称NLP&…...
【GD32F103】自定义程序库08-DMA+ADC
DMA 自定义函数库说明: 将DMA先关的变量方式在一个机构体中封装起来,主要参数有 dma外设,时钟,通道,外设寄存器地址,数据传输宽度,数据方向,外设是能dma传输使能回调函数,扫描模式中断编号dma中断使能传输完成标志数据存储空间使用一个枚举类型指明每个DMA绑定到那个…...
集成了Eureka的应用启动失败,端口号变为8080
问题 报错:集成了Eureka的应用启动失败,端口号变为8080。 原来运行的项目,突然报错,端口号变为8080: Tomcat initialized with port(s): 8080 (http)并且,还有如下的错误提示: RedirectingE…...
CMU 15-445 -- Timestamp Ordering Concurrency Control - 15
CMU 15-445 -- Timestamp Ordering Concurrency Control - 15 引言Basic T/OBasic T/O ReadsBasic T/O WritesBasic T/O - Example #1Basic T/O - Example #2 Basic T/O SummaryRecoverable Schedules Optimistic Concurrency Control (OCC)OCC - ExampleSERIAL VALIDATIONOCC …...
MURF2080CT/MURF2080CTR-ASEMI快恢复对管
编辑:ll MURF2080CT/MURF2080CTR-ASEMI快恢复对管 型号:MURF2080CT/MURF2080CTR 品牌:ASEMI 芯片个数:2 芯片尺寸:102MIL*2 封装:TO-220F 恢复时间:50ns 工作温度:-50C~150C…...
去除 idea warn Raw use of parameterized class ‘Map‘
去除 idea warn Raw use of parameterized class ‘Map’ 文档:Raw use of parameterized class ‘Map’… 链接:http://note.youdao.com/noteshare?id99bf4003db8cc5ae9813ee11e58c4d13&sub5856371AEFA740AF8FA4D8935B4F6912 添加链接描述 public…...
使用BERT分类的可解释性探索
最近尝试了使用BERT将告警信息当成一个文本去做分类,从分类的准召率上来看,还是取得了不错的效果(非结构化数据强标签训练,BERT确实是一把大杀器)。但准召率并不是唯一追求的目标,在安全场景下,…...
web APIs-练习二
轮播图点击切换: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"…...
rpc通信原理浅析
rpc通信原理浅析 rpc(remote procedure call),即远程过程调用,广泛用于分布式或是异构环境下的通信,数据格式一般采取protobuf。 protobuf(protocol buffer)是google 的一种数据交换的格式,它独立于平台语…...
【机器学习】分类算法 - KNN算法(K-近邻算法)KNeighborsClassifier
「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:零基础快速入门人工智能《机器学习入门到精通》 K-近邻算法 1、什么是K-近邻算法?2、K-近邻算法API3、…...
Spring Security 6.x 系列【64】扩展篇之多线程支持
有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列Spring Security 版本 6.1.0 本系列Spring Authorization Server 版本 1.1.0 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目录 1. 问题演示2. 解决方案:…...
Elasticsearch 简单搜索查询案例
1.MySql表结构/数据 SET FOREIGN_KEY_CHECKS0;-- ---------------------------- -- Table structure for user_lables -- ---------------------------- DROP TABLE IF EXISTS user_lables; CREATE TABLE user_lables (id varchar(255) DEFAULT NULL COMMENT 用户唯一标识,age…...
【RabbitMQ(day1)】RabbitMQ的概述和安装
入门RabbitMQ 一、RabbitMQ的概述二、RabbitMQ的安装三、RabbitMQ管理命令行四、RabbitMQ的GUI界面 一、RabbitMQ的概述 MQ(Message Queue)翻译为消息队列,通过典型的【生产者】和【消费者】模型,生产者不断向消息队列中生产消息&…...
Too many files with unapproved license: 2 See RAT report
解决方案 mvn -Prelease-nacos -Dmaven.test.skiptrue -Dpmd.skiptrue -Dcheckstyle.skiptrue -Drat.numUnapprovedLicenses100 clean install 或者 mvn -Prelease-nacos -Dmaven.test.skiptrue -Drat.numUnapprovedLicenses100 clean install...
Windows11的VTK安装:VS201x+Qt5/Qt6 +VTK7.1/VTK9.2.6
需要提前安装好VS2017和VS2019和Qt VS开发控件以及Qt VS-addin。 注意Qt6.2.4只能跟VTK9.2.6联合编译(目前VTK9和Qt6的相互支持版本)。 首先下载VTK,需要下载源码和data: Download | VTKhttps://vtk.org/download/ 然后这两个文…...
大数据时代个人信息安全保护小贴士
个人信息安全保护小贴士 1. 朋友圈“五不晒”2. 手机使用“四要”、“六不要”3. 电脑使用“七注意”4. 日常上网“七注意”5. 日常生活“五注意” 互联网就像公路,用户使用它,就会留下脚印。 每个人都在无时不刻的产生数据,在消费数据的同时…...
windows 修改 RDP 远程桌面端口号
打开 PowerShell , 执行regedit 依次展开 PortNumber HKEY_LOCAL_MACHINE \SYSTEM \CurrentControlSet \Control \Terminal Server \WinStations \RDP-Tcp 右边找到 PortNumber ,对应修改自己的端口号 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Co…...
面试题-TS(四):如何在 TypeScript 中使用类和继承?
面试题-TS(4):如何在 TypeScript 中使用类和继承? 在TypeScript中,类是一种重要的概念,它允许我们使用面向对象的编程风格来组织和管理代码。类提供了一种模板,用于创建具有相同属性和行为的对象。通过继承࿰…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
