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

你好,有抱负的程序员们!今天,我们将一起踏上PostgreSQL中日期和时间的精彩之旅。作为你友好邻里的计算机科学老师,我将用我过去15年在课堂上的热情来引导你了解这些概念。所以,拿起你的虚拟记事本,让我们开始吧!

Date/Time Functions & Operators

理解PostgreSQL中的日期和时间

在我们开始探索函数和操作符之前,让我们花点时间来理解为什么日期和时间在编程中如此重要。想象你正在构建一个时间机器(那不是很酷吗?)你需要知道你现在在哪里,以及你想去哪里(或者什么时间)。这基本上就是我们使用数据库做的事情 - 我们跟踪事情发生的时间,它们持续了多久,甚至预测未来事件。

现在,让我们看看一些PostgreSQL中最有用的日期和时间函数。

AGE(timestamp, timestamp) 和 AGE(timestamp)

AGE函数就像那个总是记得某事发生多久了的朋友。它计算两个时间戳之间的差异,或者一个时间戳与当前日期之间的差异。

示例 1:计算年龄

SELECT AGE(TIMESTAMP '2023-05-15', TIMESTAMP '1990-01-01');

这将返回类似以下内容:

33 years 4 months 14 days

这里发生了什么?我们在询问PostgreSQL计算1990年1月1日和2023年5月15日之间的时间差异。就像问,“如果某人在1990年1月1日出生,他们现在多大了?”

示例 2:从当前日期计算年龄

SELECT AGE(TIMESTAMP '1990-01-01');

这将返回1990年1月1日与当前日期之间的时间差异。就像问,“1990年1月1日出生的人现在多大了?”

当前日期/时间函数

这些函数就像你数据库内置的时钟和日历。它们告诉你现在是什么时间。

示例 3:获取当前日期和时间

SELECT CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP;

这将返回今天的日期、当前时间以及两者的组合。就像询问你的数据库,“今天是星期几,现在是什么时间,以及现在确切的时刻是什么?”

DATE_PART 和 DATE_TRUNC 函数

DATE_PART就像一个时间机器,可以放大日期或时间的特定部分。另一方面,DATE_TRUNC像一个时间简化器 - 它将时间向下舍入到指定的时间单位。

示例 4:提取日期的一部分

SELECT DATE_PART('year', TIMESTAMP '2023-05-15 10:30:00');
SELECT DATE_PART('hour', TIMESTAMP '2023-05-15 10:30:00');

第一个查询将返回2023,第二个将返回10。就像问,“这个时间戳是哪一年的?”和“这个时间戳是哪一天的哪个小时?”

示例 5:截断时间戳

SELECT DATE_TRUNC('hour', TIMESTAMP '2023-05-15 10:30:00');

这将返回'2023-05-15 10:00:00'。就像说,“给我这个时间戳,但是将分钟和秒重置为零。”

EXTRACT 函数

EXTRACT与DATE_PART相似,但语法略有不同。它是另一种提取日期或时间特定部分的方法。

示例 6:从时间戳中提取

SELECT EXTRACT(YEAR FROM TIMESTAMP '2023-05-15 10:30:00');
SELECT EXTRACT(HOUR FROM TIMESTAMP '2023-05-15 10:30:00');

这些查询将分别返回2023和10,就像我们的DATE_PART示例一样。

ISFINITE 函数

这些函数就像你数据库的现实检查。它们告诉你日期、时间戳或间隔是否是真实的有限值,或者是否是那些特殊的无限值。

示例 7:检查有限性

SELECT ISFINITE(DATE '2023-05-15');
SELECT ISFINITE(TIMESTAMP 'infinity');

第一个查询将返回true,而第二个将返回false。就像问,“2023年5月15日是一个真实的日期吗?”(是的)和“'infinity'是一个真实的时间戳吗?”(不是)。

JUSTIFY 函数

这些函数就像你数据库的时间调整器。它们接受可能有一些奇怪值的时间间隔,并将它们调整为更标准的表示。

示例 8:调整间隔

SELECT JUSTIFY_DAYS(INTERVAL '30 days');
SELECT JUSTIFY_HOURS(INTERVAL '36 hours');
SELECT JUSTIFY_INTERVAL(INTERVAL '1 month 36 hours');

这些可能返回:

1 month
1 day 12 hours
1 month 1 day 12 hours

就像说,“将这些时间段表达得更标准一些。”

函数摘要

以下是我们在本文中讨论的所有函数的便捷表格:

函数 描述
AGE() 计算时间戳之间的差异
CURRENT_DATE 返回当前日期
CURRENT_TIME 返回当前时间
CURRENT_TIMESTAMP 返回当前日期和时间
DATE_PART() 提取日期/时间的一部分
DATE_TRUNC() 将时间戳截断到指定的精度
EXTRACT() 从日期/时间中提取特定的字段
ISFINITE() 检查日期/时间/间隔是否有限
JUSTIFY_DAYS() 调整间隔中的天数
JUSTIFY_HOURS() 调整间隔中的小时
JUSTIFY_INTERVAL() 调整整个间隔

就这样,朋友们!我们一起穿越了时间(函数),提取了日期的片段,检查了无限性的有限性,甚至调整了一些间隔。记住,在数据库中处理日期和时间对于许多应用程序来说是非常重要的,从跟踪用户活动到安排事件。

在你继续编程旅程时,你会发现这些函数非常有用。它们就像你数据库工具箱中时间操作的多功能工具。继续练习,继续探索,在你意识到之前,你将成为数据库世界的时光领主!

Credits: Image by storyset