目录

日期时间数据类型

timestamp

date

time

日期时间格式化函数

to_char()

1. 日期格式化

2. 时间格式化

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 类型的日期时间转换为指定格式的字符串:

    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 类型的日期的年份:

    SELECT extract(YEAR FROM  create_time)from  t_section_data
    -- 输出:2021
    

    to_timestamp()

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

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

    SELECT to_timestamp('20211001', 'YYYYMMDD');
    -- 输出:2021-10-01 00:00:00
    

    自定义日期时间格式

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

    占位符列表

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

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

    示例

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

    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-24CURRENT_DATE = 2026-03-24 00:00:00

    2. CURRENT_DATE - 1

            昨天 00:00:00

    3. CURRENT_DATE - INTERVAL '1 second'

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


    组合起来就是:

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

    Logo

    腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

    更多推荐