PostgreSQL 时间

目录

日期时间数据类型

timestamp

date

time

日期时间格式化函数

to_char()

[1. 日期格式化](#1. 日期格式化)

[2. 时间格式化](#2. 时间格式化)

[3. 日期和时间组合格式化](#3. 日期和时间组合格式化)

extract()

to_timestamp()

自定义日期时间格式

占位符列表

示例

总结

使用

时区

超表


官网:https://postgresql.ac.cn/docs/current/datatype-datetime.html

数据类型 传递参数 参数格式

date 2022-08-16 年月日

time 13:06:54 时分秒

timestamp 2022-08-10 13:07:04 年月日时分秒

timestamptz 2022-08-10 13:07:08+00 年月日时分秒时区

timetz 17:07:02+00 时分秒时区

interval 30:30:30 -100:30:30 100:10:10 15 时间间隔

原文链接:https://blog.csdn.net/m0_46478042/article/details/144431667

名称 存储大小 描述 最小值 最大值 分辨率
timestamp [ (p) ] [ without time zone ] 8 字节 日期和时间(无时区) 公元前 4713 年 公元 294276 年 1 微秒
timestamp [ (p) ] with time zone 8 字节 日期和时间(带时区) 公元前 4713 年 公元 294276 年 1 微秒
date 4 字节 日期(无时间) 公元前 4713 年 公元 5874897 年 1 天
time [ (p) ] [ without time zone ] 8 字节 时间(无日期) 00:00:00 24:00:00 1 微秒
time [ (p) ] with time zone 12 字节 时间(无日期,带时区) 00:00:00+1559 24:00:00-1559 1 微秒
interval [ fields ] [ (p) ] 16 字节 时间间隔 -178000000 年 178000000 年 1 微秒

日期时间数据类型

PostgreSQL 支持多种日期时间数据类型,例如 timestampdatetime 等。这些数据类型可以存储不同精度的时间信息。在进行日期时间格式转换之前,我们需要了解这些数据类型的特点。

timestamp

timestamp 数据类型用于存储日期和时间的完整信息,包括年、月、日、时、分、秒和时区。例如,2021-10-01 12:34:56+08 表示2021年10月1日12点34分56秒,时区为东八区。

date

date 数据类型用于存储日期信息,不包含具体的时间。例如,2021-10-01 表示2021年10月1日。

time

time 数据类型用于存储时间信息,不包含具体的日期。例如,12:34:56 表示12点34分56秒。

日期时间格式化函数

在 PostgreSQL 中,我们可以使用一些内置函数来对日期时间进行格式化。下面介绍几个常用的函数及其用法。

to_char()

to_char() 函数用于将日期或时间转换为指定的字符串格式。它接受两个参数:要转换的日期时间值和目标格式。

复制代码
TO_CHAR(expression, format)
  • expression:需要进行格式化的时间 / 日期表达式,可以是日期、时间、时间戳等类型的数据,也可以是包含这些类型数据的列名。
  • format:指定输出的格式模板,由一系列格式元素组成。

以下示例将 timestamp 类型的日期时间转换为指定格式的字符串:

sql 复制代码
SELECT to_char('2021-10-01 12:34:56', 'YYYY-MM-DD HH12:MI:SS');
-- 输出:2021-10-01 12:34:56

1. 日期格式化

  • YYYY:四位数的年份。

    SELECT TO_CHAR(CURRENT_DATE, 'YYYY');

该语句会将当前日期中的年份以四位数形式输出。

  • MM:两位数的月份(01 - 12)。

    SELECT TO_CHAR(CURRENT_DATE, 'MM');

此语句会输出当前日期对应的两位数月份。

  • DD:两位数的日期(01 - 31)。

    SELECT TO_CHAR(CURRENT_DATE, 'DD');

它会返回当前日期中的日期部分,以两位数显示。

  • 组合日期格式:可以将多个格式元素组合使用,以满足不同的日期显示需求。

    SELECT TO_CHAR(CURRENT_DATE, 'YYYY年MM月DD日');

上述语句会将当前日期格式化为 "年 - 月 - 日" 的形式,如 "2025 年 05 月 10 日"。

2. 时间格式化

  • HH24:24 小时制的小时数(00 - 23)。

    SELECT TO_CHAR(CURRENT_TIME, 'HH24');

该语句会输出当前时间的 24 小时制小时数。

  • MI:分钟数(00 - 59)。

    SELECT TO_CHAR(CURRENT_TIME, 'MI');

它会返回当前时间的分钟部分。

  • SS:秒数(00 - 59)。

    SELECT TO_CHAR(CURRENT_TIME, 'SS');

此语句会输出当前时间的秒数。

  • 组合时间格式:将不同的时间格式元素组合起来,形成完整的时间显示格式。

    SELECT TO_CHAR(CURRENT_TIME, 'HH24:MI:SS');

该语句会将当前时间格式化为 "小时:分钟:秒" 的形式,如 "14:30:00"。

3. 日期和时间组合格式化

  • YYYY-MM-DD HH24:MI:SS:常见的日期和时间组合格式。

    SELECT TO_CHAR(CURRENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS');

extract()

**extract() 函数用于从日期或时间值中提取特定的部分,例如年、月、日、小时等。**它接受两个参数:要提取的部分和日期时间值。

以下示例提取 date 类型的日期的年份:

sql 复制代码
SELECT extract(YEAR FROM  create_time)from  t_section_data
-- 输出:2021

to_timestamp()

to_timestamp() 函数用于将字符串转换为 timestamp 类型的日期时间值。它接受两个参数:要转换的字符串和日期时间的格式。

以下示例将字符串转换为 timestamp 类型的日期时间:

sql 复制代码
SELECT to_timestamp('20211001', 'YYYYMMDD');
-- 输出:2021-10-01 00:00:00

自定义日期时间格式

除了使用内置函数,我们还可以自定义日期时间格式。在 PostgreSQL 中,我们可以使用特定的占位符来表示不同的日期时间部分。

占位符列表

下面是一些常用的占位符及其对应的日期时间部分:

  • YYYY:4位数的年份
  • MM:两位数的月份
  • DD:两位数的日期
  • HH12:12小时制的小时数
  • HH24:24小时制的小时数
  • MI:分钟数
  • SS:秒数

示例

以下示例演示了如何使用占位符来自定义日期时间格式:

sql 复制代码
SELECT to_char(create_time, 'YYYY年MM月DD日 HH12时MI分SS秒')from  t_section_data;-- 输出:2021年10月01日 12时34分56秒

SELECT to_char(create_time, 'YYYY年MM月DD日')from  t_section_data;
-- 输出:2021年10月01日

SELECT to_char(create_time, 'HH24时MI分SS秒')from  t_section_data;
-- 输出:12时34分56秒

记住年月日时分秒的模式字符串:YYYY-MM-DD HH24:MI:SS

日期 --> 字符串 to_char(date, formatString)

select to_char(now(), 'YYYY-MM-DD HH24, MI:SS')

字符串 --> 日期 to_date ('dateString', 'formatString')

select to_date('2021-12-18 22:24:15', 'YYYY-MM-DD HH24:MI:SS')

to_timestamp('20211001', 'YYYYMMDD');

SELECT to_timestamp('20211001', 'YYYYMMDD');

-- 输出:2021-10-01 00:00:00

https://blog.csdn.net/wuyujin1997/article/details/122018097

总结

通过使用 to_char() 函数可以方便地将日期时间转换为指定格式的字符串。

同时,extract() 函数可以提取日期时间值中的特定部分,帮助我们进行更精细的处理。

如果需要将字符串转换为日期时间类型,可以使用 to_timestamp() 函数。

参考:

https://geek-docs.com/postgresql/postgresql-questions/403_postgresql_convert_date_time_into_specified_format_in_postgresql_query.html

https://www.cnblogs.com/dbasql/p/18765043

使用

--更新22数据为23号

update t_section_data_stat td SET arrive_time = arrive_time + INTERVAL '1 day' where td.arrive_time BETWEEN CURRENT_DATE - 2 AND CURRENT_DATE - INTERVAL '1 second'

复制代码
WHERE arrive_time 
BETWEEN CURRENT_DATE - 1 
AND CURRENT_DATE - INTERVAL '1 second';

翻译成人话:

只匹配【昨天一整天】的数据,从 昨天 00:00:00 到 昨天 23:59:59

  1. CURRENT_DATE

今天的日期(不带时间) 比如今天是 2026-03-24``CURRENT_DATE = 2026-03-24 00:00:00

  1. CURRENT_DATE - 1

昨天 00:00:00

  1. CURRENT_DATE - INTERVAL '1 second'

今天 00:00:00 往前减 1 秒= 昨天 23:59:59


组合起来就是:

bash 复制代码
arrive_time >= 昨天 00:00:00
AND
arrive_time <= 昨天 23:59:59
  • arrive_time >= CURRENT_DATE -2前天、昨天、今天 全部更新(范围太大)

  • BETWEEN ... AND ...只更新昨天(范围精准、安全)

WHERE arrive_time

BETWEEN CURRENT_DATE - 1

AND CURRENT_DATE - INTERVAL '1 second';

BETWEEN 昨天0点 AND 昨天23点59分59秒= 只筛选昨天一整天的数据

时区

复制代码
--查看时区
select now();

--修改数据库时区 08   https://zhuanlan.zhihu.com/p/6698619251
--alter database "vims-set-das" set timezone='Asia/Shanghai';

超表

创建时候timestamptz 时区字段

相关推荐
m0_493934536 分钟前
如何监控AWR数据收集Job_DBA_SCHEDULER_JOBS中的BSLN_MAINTAIN_STATS
jvm·数据库·python
万岳科技系统开发8 分钟前
商城系统搭建自建平台与入驻第三方平台对比分析
数据库·小程序·架构
不剪发的Tony老师18 分钟前
QoreDB:一款跨平台、现代化的通用数据库客户端
数据库
五阿哥永琪41 分钟前
MySQL 中 VARCHAR、TEXT 与 JSON 类型:区别、场景与选型指南
数据库·mysql·json
a95114164243 分钟前
Go语言如何操作OSS_Go语言阿里云OSS上传教程【完整】
jvm·数据库·python
2401_8971905544 分钟前
MySQL中如何利用LIMIT配合函数分页_MySQL分页查询优化
jvm·数据库·python
Polar__Star1 小时前
C#怎么使用并发集合 C#ConcurrentDictionary和ConcurrentQueue线程安全集合怎么用【进阶】
jvm·数据库·python
xiaoshuaishuai81 小时前
C# Codex 脚本编写
java·服务器·数据库·c#
Rooting++1 小时前
mysql 算一堆经纬度的距离总长
数据库·mysql
y = xⁿ2 小时前
MySQL:count(1)与count(*)有什么区别,深分页问题
android·数据库·mysql