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 时区字段

相关推荐
Nyarlathotep01132 小时前
Redis的数据结构(4):跳表
数据库·redis
☆5662 小时前
如何为开源Python项目做贡献?
jvm·数据库·python
Bdygsl2 小时前
MySQL(5)—— 聚合查询/分组查询/联合查询
数据库·mysql
m0_560396472 小时前
使用Python进行PDF文件的处理与操作
jvm·数据库·python
lhbian2 小时前
开启mysql的binlog日志
数据库·mysql
NineData2 小时前
从个人开发到企业专属集群,NineData 的产品矩阵怎么做的?
运维·数据库·程序员
2301_816651222 小时前
用Python监控系统日志并发送警报
jvm·数据库·python
实心儿儿2 小时前
C++ —— AVL树实现
数据库