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