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’;date2023-07-31
+select date ‘2023-07-24’ + interval ‘1 hour’;timestamp2023-07-24 01:00:00.000000
+select date ‘2023-07-24’ + time ‘15:16’;timestamp2023-07-24 15:16:00.000000
+select interval ‘1 day’ + interval ‘1 hour’;interval0 years 0 mons 1 days 1 hours 0 mins 0.0 secs
+select timestamp ‘2023-07-24 15:16’ + interval ‘23 hours’;timestamp2023-07-25 14:16:00.000000
+select time ‘01:00’ + interval ‘3 hours’;time04:00:00
-select - interval ‘23 hours’;interval0 years 0 mons 0 days -23 hours 0 mins 0.0 secs
-select date ‘2023-07-24’ - date ‘2023-07-22’;integer2
-select date ‘2023-07-24’ - integer ‘7’;date2023-07-17
-select date ‘2023-07-24’ - interval ‘1 hour’;timestamp2023-07-23 23:00:00.000000
-select time ‘05:00’ - time ‘03:00’;interval0 years 0 mons 0 days 2 hours 0 mins 0.0 secs
-select time ‘05:00’ - interval ‘2 hours’;time03:00:00
-select timestamp ‘2023-07-24 23:00’ - interval ‘23 hours’;timestamp2023-07-24 00:00:00.000000
-select interval ‘1 day’ - interval ‘1 hour’;interval0 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’;interval0 years 0 mons 0 days -9 hours 0 mins 0.0 secs
*select interval ‘1 hour’ * double precision ‘3.5’;interval0 years 0 mons 0 days 3 hours 30 mins 0.0 secs
/select interval ‘1 hour’ / double precision ‘1.5’;interval0 years 0 mons 0 days 0 hours 40 mins 0.0 secs

日期/时间函数:

函数描述例子返回类型结果
age(timestamp, timestamp)第1个timestamp 减去 第2个timestampselect age(‘2023-07-24’, ‘1997-10-26’);interval25 years 8 mons 29 days 0 hours 0 mins 0.0 secs
age(timestamp)从current_date 减去 timestamp的值select age(timestamp ‘1997-10-26’);interval25 years 8 mons 29 days 0 hours 0 mins 0.0 secs
current_date今天的日期select current_date;date2023-07-24
current_time现在的时间select current_time;time07:53:43.911756 +00:00
current_timestamp日期和时间select current_timestamp;timestamp2023-07-24 07:54:19.495372 +00:00
date_part(text, timestamp)获取子域(等效于extract)select date_part(‘hour’, timestamp ‘2023-07-24 15:56:34’);double15
date_part(text, interval)获取子域(等效于extract)select date_part(‘month’, interval ‘2 years 3 months’);double3
date_trunc(text, timestamp)截断成指定的精度select date_trunc(‘hour’, timestamp ‘2023-07-24 15:56:34’);timestamp2023-07-24 15:00:00.000000
extract(field from timestamp)获取子域select extract(hour from timestamp ‘2023-07-24 15:56:34’);double15
extract(field from interval)获取子域select extract(month from interval ‘2 years 3 months’);double3
localtime当前时间select localtime;time08:00:08
localtimestamp当前日期和时间select localtimestamp;timestamp2023-07-24 08:05:03.650472
now()当前的日期和时间(等效于current_timestamp)select now();timestamp2023-07-24 08:09:30.828408 +00:00
timeofday()当前日期和时间select timeofday();textMon Jul 24 08:09:51.870484 2023 UTC

extract,date_part函数支持的field

extractdate_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年份域除以10select 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
epochUnix时间戳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
isodowISO 周几(1-7,其中1代表星期一)select extract(isodow from timestamp ‘2023-07-24 15:56:34’);1
isoyearISO 年份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’);text06:03:19
to_char(interval, text)把时间间隔转为字串select to_char(interval ‘14h 6m 20s’, ‘HH24:MI:SS’);text14:06:20
to_date(text, text)把字串转换成日期select to_date(‘25 Jul 2023’, ‘DD Mon YYYY’);date2023-07-24
to_timestamp(text, text)把字串转换成时间戳select to_timestamp(‘25 Jul 2023’, ‘DD Mon YYYY’);timestamp2023-07-24 00:00:00.000000 +00:00
to_timestamp(double)把UNIX纪元转换成时间戳select to_timestamp(1690179888);timestamp2023-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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/7487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于STM32设计的人体健康监护系统(华为云IOT)

一、设计需求 1.1 设计需求总结 根据需求,要求设计一款基于 STM32 的人体健康监护系统。采用系统模块化思路进行,将多个数模传感器收集到的数据和操作指令一并送至 STM32 中心处理器进行处理分析。 该系统可以实时监测被测者的心率、体温以及周围环境的温度,也同时可以通…

(vue)vue项目中引入外部字体

(vue)vue项目中引入外部字体 效果&#xff1a; 第一步 放置字体包&#xff0c;在assets下创建一个fonts文件夹&#xff0c;放入下载的字体文件 第二步 创建一个font.css文件用于定义这个字体包的名字 第三步 在App.vue的css中将这个css文件引入 第四步 页面使用 font-famil…

Qt : day1

1.聊天界面 #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {qDebug() << this->size(); //获取当前页面尺寸this->setFixedSize(500, 600); //设置固定尺寸this->setWindowTitle("聊天框"); //设置窗口…

单Bank OTA升级:STM32G071 APP (二)

接上一篇文章&#xff1a;单Bank OTA升级&#xff1a;STM32G071 BootLoader (一)&#xff1a;跳转链接 什么是单Bank升级&#xff1a;将Flash划分为以下3个区域。 BootLoader区&#xff1a;程序进行升级的引导程序&#xff0c;根据Upade_Flag来判断跳转Bank区运行程序或是接收…

安卓开发后台应用周期循环获取位置信息上报服务器

问题背景 最近有需求&#xff0c;在APP启动后&#xff0c;退到后台&#xff0c;还要能实现周期获取位置信息上报服务器&#xff0c;研究了一下实现方案。 问题分析 一、APP退到后台后网络请求实现 APP退到后台后&#xff0c;实现周期循环发送网络请求。目前尝试了两种方案是…

Spring 中一个少见的引介增强 IntroductionAdvisor

我们平时做 AOP 开发的时候&#xff0c;基本上都是增强某一个方法&#xff0c;在某一个方法执行之前或者执行之后做一些事情&#xff0c;这种叫做 PointcutAdvisor&#xff0c;实际上&#xff0c;Spring 中的 Advisor 大致可以分为两种类型&#xff0c;除了 PointcutAdvisor 之…

Openlayers实战,Openlayers实现一个车辆转向运动轨迹动画,支持根据轨迹运动方向自动改变车头转向角度,无需定时器,丝滑小车转向运动效果

专栏目录: OpenLayers入门教程汇总目录 前言 本章作为OpenLayers入门文章《OpenLayers入门,OpenLayers动画效果实现,OpenLayers实现轨迹运动动画》的的增强进阶篇章,实现了入门教程中没有实现的小车车头方向根据运动方向自动转向的功能。 本章代码不使用任何setTimeout和…

金融中的数学:贝叶斯公式

1.贝叶斯定理 贝叶斯定理是概率论中的一项重要定理&#xff0c;用于在已知某一事件的条件下&#xff0c;求另一事件发生的概率。它是根据条件概率推导出来的&#xff0c;得名于英国数学家托马斯贝叶斯。 贝叶斯定理可以表示为&#xff1a; 这个式子就是贝叶斯公式&#xff0c…

解决FLink:Missing required options are: slot.name

[ERROR] Could not execute SQL statement. Reason: org.apache.flink.table.api.ValidationException: One or more required options are missing.Missing required options are:slot.name解决 https://ververica.github.io/flink-cdc-connectors/release-2.4/content/connec…

提升 API 可靠性的五种方法

API 在我们的数字世界中发挥着关键的作用&#xff0c;使各种不同的应用能够相互通信。然而&#xff0c;这些 API 的可靠性是保证依赖它们的应用程序功能正常、性能稳定的关键因素。本文&#xff0c;我们将探讨提高 API 可靠性的五种主要策略。 1.全面测试 要确保 API 的可靠性…

Seata部署(Centos和Docker)

一、简介 Seata 是一款开源的分布式事务框架。致力于在微服务架构下提供高性能和简单易用的分布式事务服 务。在 Seata 开源之前&#xff0c;Seata 对应的内部版本在阿里经济体内部一直扮演着分布式一致性中间件的⻆ 色&#xff0c;帮助经济体平稳的度过历年的双11&#xff0c…

11 spring-boot的MVC配置原理

11.1 spring-boot为MVC提供的自动配置 1.ContentNegotiatingViewResolver视图解析器&#xff1b; 2.静态资源或者支持WebJars&#xff1b; 3.自动注册类型转换器&#xff1a;比如说前台提交user的字段&#xff0c;后台自动封装的意思&#xff1b; 4.HttpMessageConverters&…

Vue中TodoList案例_勾选

与上一篇Vue中TodoList案例_添加有三个文件变化了 App.vue&#xff1a;中加了checkTodo方法 <template><div id"root"><div class"todo-container"><div class"todo-wrap"><MyHeader :addTodo"addTodo"/&…

Linux学习之case

case的格式如下&#xff1a; case "变量" in值1)指令集1;;值2)指令集2;;*)指令集n;; esaccase会将变量的值跟值1、值2等进行比较&#xff0c;符合就执行后边对应的指令集&#xff0c;注意)只是一个标识&#xff0c;表明这是一个分支&#xff0c;;;是一个分支结束&am…

Sentinel 规则持久化到 Nacos

一、Sentinel规则管理模式&#x1f349; Sentinel的控制台规则管理有三种模式&#xff1a; 原始模式&#x1f95d; 原始模式&#xff1a;控制台配置的规则直接推送到Sentinel客户端&#xff0c;也就是我们的应用。然后保存在内存中&#xff0c;服务重启则丢失 pull模式&#…

对于MyBatis的深入介绍

对于MyBatis的深入介绍 当涉及到数据库操作时&#xff0c;MyBatis是一种广泛使用的ORM&#xff08;对象关系映射&#xff09;框架。MyBatis的主要目标是简化数据库交互&#xff0c;并提供对SQL的灵活控制。下面是对MyBatis的详细介绍&#xff1a; 数据库交互&#xff1a;MyBat…

平台化的测试工具推荐|一站式测试平台RunnerGo

互联网行业的发展到今天越来越多的公司更加注重工作效率和团队协作&#xff0c;越来越多的产品也趋于平台化&#xff0c;平台化也更有利于提高团队效率&#xff0c;代码管理、持续构建、持续部署这些工具的发展都是非常超前的&#xff0c;它们对于团队协作的支持和工作效率的提…

【前端知识】React 基础巩固(三十三)——Redux的使用详解

React 基础巩固(三十三)——Redux的使用详解 Redux的使用详解 针对React 基础巩固&#xff08;三十二&#xff09;中的案例&#xff0c;我们希望抽取页面中共有的代码&#xff08;例如下方的代码&#xff09;&#xff0c;使用高阶组件统一拦截。 constructor() {super();this.…

Packet Tracer – 配置动态 NAT

Packet Tracer – 配置动态 NAT 拓扑图 目标 第 1 部分&#xff1a;配置动态 NAT 第 2 部分&#xff1a;验证 NAT 实施 第 1 部分&#xff1a; 配置动态 NAT 步骤 1&#xff1a; 配置允许的流量。 在 R2 上&#xff0c;为 ACL 1 配置一个语句以允许属于 172.16.0.…

【Docker-compose】基于Docker-compose创建LNMP环境并运行Wordpress网站平台

基于Docker compose创建LNMP环境并运行Wordpress网站平台 1.Docker-Compose概述2. YAML文件格式及编写注意事项3. Docker-Compose配置常用字段4.Docker Compose常用命令5.使用Docker-compose创建LNMP环境&#xff0c;并运行Wordpress网站平台5.1 Docker Compose环境安装5.2 使用…