PostgreSQL 时间/日期函数和操作符

server/2025/3/16 16:14:40/

PostgreSQL 提供了丰富的时间 / 日期函数和操作符,可用于时间和日期的处理、计算、格式化等操作,下面为你详细介绍:

常用数据类型

在介绍函数和操作符之前,先了解 PostgreSQL 中常用的时间 / 日期数据类型:

  • DATE:用于存储日期,格式为 YYYY-MM-DD
  • TIME:用于存储一天中的时间,格式为 HH:MM:SS
  • TIMESTAMP:用于存储日期和时间,格式为 YYYY-MM-DD HH:MM:SS
  • TIMESTAMPTZ:带时区的 TIMESTAMP,会自动处理时区转换。
  • INTERVAL:用于表示一段时间间隔。

操作符

1. 加法和减法操作符
  • 日期和时间与间隔相加 / 减:可以使用 + 和 - 操作符将日期或时间与 INTERVAL 类型相加或相减,得到新的日期或时间。
-- 计算当前日期往后推 10 天的日期
SELECT CURRENT_DATE + INTERVAL '10 days';-- 计算当前时间往前推 2 小时的时间
SELECT CURRENT_TIME - INTERVAL '2 hours';
  • 日期和时间相减:两个日期或时间相减可以得到一个 INTERVAL 类型的结果,表示它们之间的时间间隔。
-- 计算两个日期之间的天数差
SELECT '2025-05-01'::DATE - '2025-04-01'::DATE;
2. 比较操作符
  • 可以使用 ><>=<==!= 等比较操作符对日期和时间进行比较。
-- 查询 2025 年 1 月 1 日之后的订单
SELECT * FROM orders WHERE order_date > '2025-01-01'::DATE;

函数

1. 获取当前日期和时间
  • CURRENT_DATE:返回当前日期。
SELECT CURRENT_DATE;
  • CURRENT_TIME:返回当前时间,带时区。
SELECT CURRENT_TIME;
  • CURRENT_TIMESTAMP:返回当前日期和时间,带时区。
SELECT CURRENT_TIMESTAMP;
  • NOW():与 CURRENT_TIMESTAMP 功能相同,返回当前日期和时间,带时区。
SELECT NOW();
2. 日期和时间提取函数
  • EXTRACT:用于从日期或时间中提取特定的部分,如年、月、日、小时等。
-- 提取当前日期的年份
SELECT EXTRACT(YEAR FROM CURRENT_DATE);-- 提取当前时间的小时数
SELECT EXTRACT(HOUR FROM CURRENT_TIME);
  • DATE_PART:功能与 EXTRACT 类似,也是从日期或时间中提取特定部分。
-- 提取日期的月份
SELECT DATE_PART('month', '2025-05-10'::DATE);
3. 日期和时间格式化函数
  • TO_CHAR:用于将日期或时间格式化为指定的字符串。
-- 将当前日期格式化为 'YYYY年MM月DD日' 的形式
SELECT TO_CHAR(CURRENT_DATE, 'YYYY年MM月DD日');-- 将当前时间格式化为 'HH24:MI:SS' 的形式
SELECT TO_CHAR(CURRENT_TIME, 'HH24:MI:SS');
4. 日期和时间计算函数
  • AGE:计算两个日期或时间之间的时间间隔。
-- 计算从出生到现在的年龄
SELECT AGE(CURRENT_DATE, '1990-01-01'::DATE);
  • MAKE_DATEMAKE_TIMEMAKE_TIMESTAMP:用于根据指定的部分创建日期、时间或日期时间。
-- 创建一个日期
SELECT MAKE_DATE(2025, 5, 10);-- 创建一个时间
SELECT MAKE_TIME(12, 30, 0);-- 创建一个日期时间
SELECT MAKE_TIMESTAMP(2025, 5, 10, 12, 30, 0);
5. 时区转换函数
  • AT TIME ZONE:用于进行时区转换。
-- 将当前时间转换为纽约时区的时间
SELECT CURRENT_TIMESTAMP AT TIME ZONE 'America/New_York';

http://www.ppmy.cn/server/175473.html

相关文章

MyBatis一对多查询方式

在 MyBatis 中&#xff0c;一对多查询是指一个实体对象&#xff08;如 Order&#xff09;关联多个子对象&#xff08;如 OrderItem&#xff09;。这种关系在数据库中通常通过外键实现&#xff0c;而在 MyBatis 中可以通过 resultMap 的嵌套集合&#xff08;<collection>&…

C++【类和对象】(超详细!!!)

C【类和对象】 1.运算符重载2.赋值运算符重载3.日期类的实现 1.运算符重载 (1).C规定类类型运算符使用时&#xff0c;必须转换成调用运算符重载。 (2).运算符重载是具有特殊名字的函数&#xff0c;名字等于operator加需要使用的运算符&#xff0c;具有返回类型和参数列表及函数…

Blender选择循环边/循环面技巧

循环边和循环面都是有方向的 可以按方向选取相对应的循环边/循环面 按住ShiftAlt左键单击 竖着的边就会选择竖着的循环面 按住ShiftAlt左键单击 横着的边就会选择横着的循环面 也没人讲过这个 自己摸索出来的 , 真是踩坑无数 , 今天终于知道了...

Django 分页操作详解

Django 分页操作详解 在 Django 项目中&#xff0c;当处理大量数据时&#xff0c;分页是一项非常关键的功能。它不仅可以提高用户体验&#xff0c;还能减少服务器的负担。Django 提供了一个强大的分页工具——django.core.paginator.Paginator&#xff0c;可以很方便地实现数据…

Python扑克牌游戏更新哦~【增加更多牌类】

以下是更新后的代码&#xff0c;包含了常见单牌、对子、三带、顺子、连对、飞机等 更新后的完整代码 import random class Card: def __init__(self, suit, rank): self.suit suit # 花色&#xff1a;♠, ♥, ♣, ♦ self.rank rank # 牌面&#xff…

linux - 基础IO之操作与文件描述符全解析:从C语言到系统调用底层实现

目录 1.回顾c语言中所学的文件 2.提炼对文件的理解&#xff08;linux基础io第一阶段的学习&#xff09; a.在操作系统内部&#xff0c;一个进程和一个被打开的文件&#xff0c;他们到后面会变成两种对象之间的指针关系。 b.文件 属性 内容 c.在c语言中,以w的方式打开文件…

基于自定义线程池手写一个异步任务管理器

我们在后端执行某些耗时逻辑操作时往往会导致长时间的线程阻塞&#xff0c;在这种情况之下&#xff0c;我们往往会引一条异步线程去处理这些异步任务&#xff0c;如果每次都创建新的线程来处理这些任务&#xff0c;不仅会增加代码冗余&#xff0c;还可能造成线程管理混乱&#…

[设计模式]1_设计模式概览

摘要&#xff1a;设计模式原则、设计模式的划分与简要概括&#xff0c;怎么使用重构获得设计模式并改善代码的坏味道。 本篇作概览与检索用&#xff0c;后续结合源码进行具体模式深入学习。 目录 1、设计模式原理 核心原则&#xff08;语言无关&#xff09; 本质原理图 原…