PostgreSQL将日期时间转换为日期:10个简化的实际例子
Divyansh SharmaonData Cleaning,Database Management Systems,PostgreSQL,Relational Database,Tutorials- June 23rd, 2022 -Write for Hevo
DateTime变量存储了重要的信息,例如交易发生时的日期、时间和时区,或者PostgreSQL表中的新条目。日期和时间特征不仅对金融和电子商务有帮助,而且对训练模型或执行特征工程的数据科学项目也有帮助。
但是很多时候,这些日期和时间特征被合并到DateTime变量中。对于PostgreSQL用户来说,使用DateTime变量会引起一些问题,比如 "我如何从DateTime中提取日期字段?"或者 "如果我只是需要知道交易发生的时间怎么办?"
在本教程中,我们将讨论几个PostgreSQL函数,它们可以帮助你把PostgreSQL表中的DateTime值或给定的时间戳轻松转换为日期。我们将分享10个实际例子,帮助你更好地理解Postgres将时间戳转换为日期的方法。
目录
什么是PostgreSQL?
图片来源。软件工程日报
PostgreSQL是一个优秀的开源的、功能齐全的关系型数据库管理系统(RDBMS),由PostgreSQL全球开发小组开发。它已经使用了20多年,是一个多范式的数据库,支持关系型、对象关系型、JSON、XML和图数据类型。
PostgreSQL从一开始就以其可靠、功能丰富、性能卓越的实用性而闻名。每一个版本都被非常仔细地控制,PostgreSQL的测试版本至少要经过一个月的测试。许多企业依靠PostgreSQL作为他们的主要数据存储/数据仓库,用于在线、移动、地理空间和分析应用。
PostgreSQL在所有主要的操作系统上运行,包括Linux、UNIX(AIX、BSD、HP-UX、SGI IRIX、Mac OS X、Solaris、Tru64)和Windows。
在本指南中了解更多关于创建PostgreSQL表的信息 -创建PostgreSQL表。综合指南101。要了解PostgreSQL中最好的报告工具,请阅读5个最好的PostgreSQL报告工具。
PostgreSQL的主要特点
- 开源。PostgreSQL是一个对象关系数据库管理系统(ORDBMS)。这使得PostgreSQL可以同时提供面向对象和关系型数据库的功能。它是一个免费使用的开源ORDBMS。
- **突出的用户群。**PostgreSQL的用户包括苹果、思科、Etsy、Facebook、Instagram、Red Hat、Skype、Spotify和雅虎等知名企业,仅此而已。
- 多版本并发控制。为了管理并发请求,PostgreSQL有一个多版本并发控制,给每个事务一个数据库的 "快照",允许在不影响其他事务的情况下进行更改。这在很大程度上消除了对读锁的需要,并确保数据库保持ACID原则。
- 可靠性和标准符合性。PostgreSQL的写前日志使它成为一个容错的数据库。其庞大的开放源码贡献者基础使其拥有一个内置的社区支持网络。PostgreSQL符合ACID标准,并且完全支持外键、连接、视图、触发器和存储过程,可以使用许多不同的语言。
- 一个支持性的社区。PostgreSQL提供了一个专门的社区,可以随时为你服务。私人的、第三方的支持服务也是可用的。该社区通过PostgreSQL全球开发小组更新PostgreSQL平台。
为什么与PostgreSQL合作,将日期时间转换为日期函数?
日期时间格式对每个企业来说都是必不可少的。无论你是检查金融交易的金融分析师,还是维护库存记录的供应链经理,DateTime格式都能帮助你记录和识别商业交易中每一个与时间有关的元素。这包括日期、小时、分钟、秒,甚至一周中的几天、几个月和几年,当一个交易发生时,或在你的PostgreSQL数据库中创建一个新记录时。
通常情况下,DateTime格式包括三种数据类型。DATE, TIME, 和TIMESTAMP。这些数据类型通常用于关系型数据库,如PostgreSQL和MySQL,以及Python等编程语言。能够从这些DateTime格式中提取必要的信息,例如,日期,是一项重要的技能,可以进一步提高你对数据的理解,帮助你更好地进行数据分析。
在接下来的PostgreSQL转换DateTime为日期指南的章节中,我们将探讨各种例子来帮助你清理数据,执行PostgreSQL格式化日期,并从DateTime格式中提取必要的信息。
使用Hevo的无代码数据管道在几分钟内复制PostgreSQL数据
Hevo数据,一个完全管理的数据管道平台,可以帮助你在几次点击中自动化,简化和丰富你的数据复制过程。通过Hevo的各种连接器和快速的数据管道,你可以从100多个数据源中提取和加载数据,如**PostgreSQL**,MySQL和MS SQL Server,直接进入你的数据仓库,或任何数据库。
为了进一步简化和准备你的数据分析,你可以使用Hevo强大的内置转换层来处理和丰富原始颗粒数据,而不需要写一行代码。
Hevo是最快,最简单,最可靠的数据复制平台,将为你的工程带宽和时间节省数倍。今天就试试我们的14天免费试用版,体验一下自动化的、无忧无虑的PostgreSQL数据复制吧!
如何执行PostgreSQL将日期时间转换为日期?
从一个给定的时间戳列中提取日期
假设你在PostgreSQL的客户表中有一个时间戳列,包含他们在你网站上成功完成交易的记录。你的时间戳列可能包含也可能不包含时区信息。我们假设你的系统记录了格式为 "YYY/MM/DD/H24:MI:ss "的DateTime信息,你的销售经理想知道10月份每天的销售信息。
使用PostgreSQL中的**DATE()**函数,你可以从你的时间戳列中提取日期值。一个简单的SQL查询就可以从 "customer_transactions"中得到包含时间戳值的日期值。
SELECT DATE(customer_transaction) FROM customers;
PostgreSQL 从一个特定的时间戳转换日期时间到日期
另一种方法是通过使用":: "操作符和 "DATE "关键字来从一个特定的时间戳中提取日期值。
通过这个方法,你可以执行一个特定的Postgres时间戳转换为日期,或者将当前的时间戳(使用**now()**函数)转换为日期。
例如,我们假设你有一个时间戳'2022-07-07 07:37:33',你需要从中提取日期字段。下面的PostgreSQL中的SQL查询可以帮助你做到这一点。
SELECT '2022-07-07 07:37:33'::TIMESTAMP::DATE;
Output:
date
------------
2022-07-07
(1 row)
或者,假设你想从当前的时间戳中提取今天的日期。PostgreSQL中的**now()**函数返回带有时区的当前日期和时间,你可以使用下面的SQL查询来执行PostgreSQL转换DateTime为日期的操作。
SELECT NOW()::DATE;
Output:
now
------------
2022-06-22
(1 row)
PostgreSQL关系数据库提供了多种内置函数,如TO_CHAR()、EXTRACT()和DATE_PART(),来帮助你执行PostgreSQL转换DateTime为日期的操作。在接下来的章节中,请看这些PostgreSQL转换DateTime为日期的函数。
PostgreSQL使用TO_CHAR()函数格式化日期
在PostgreSQL的关系数据库中,**TO_CHAR()**函数将各种数据类型如时间戳、间隔、整数、浮点或数字值转换为格式化的字符串。它有一个简单的语法,如下所示。
TO_CHAR(expression, format)
表达式参数接收数据类型,如时间戳、时间间隔、整数、浮点或你希望转换为字符串的数字值作为输入。format参数指定了结果字符串的格式,可以使用多个选项提供,如
| 格式 | 说明 |
| HH | 一天中的小时(01-12) |
| HH12 | 一天中12小时格式的小时(01-12) |
| HH24 | 一天中24小时格式的小时(00-23) |
| MI | 每小时的分钟数(00-59) |
| SS | 分钟的秒数(00-59) |
| MS | 毫秒(000-999) |
| US | 微秒(0000-999999) |
| AM,上午,下午或下午 | 子午指示器(无句号) |
| A.M., a.m., P.M. 或 p.m. | 子午线指示器(不含句号) |
| YYYY | 日历年(4位或更多数字)。 |
| YYY | 日历年(最后3位数) |
| YY | 日历年(最后2位数字) |
| Y | 日历年(最后一位数) |
| 月 | 大写字母的月份名称 |
| 月 | 大写的月份名称 |
| 月 | 小写的月份名称 |
| 月 | 大写的月份名称缩写(前3个字符)。 |
| 月 | 大写的月份名称缩写(前3个字符) |
| MON | 小写的月份名称缩写 (前3个字符) |
| MM | 月号(01-12)。 |
| 日 | 大写的日名 |
| 日 | 大写的日的名称 |
| DY | 大写的日名缩写(前3个字符)。 |
| 日 | 大写字母形式的日名缩写(前3个字符) |
| dy | 小写的日名缩写(前3个字符) |
| DDD | 日历年日(001-366)。 |
| DD | 月的一天(01-31) |
| D | 工作日(星期日(1)至星期六(7))。 |
| W | 该月的周数(1-5) |
| WW | 年的周数(1-53)。 |
| Q | 一年中的季度 |
| RM | 大写罗马数字的月份名称(I-XII;I=1月)。 |
| TZ | 大写的时区缩写(仅在to_char中支持)。 |
| tz | 小写的时区缩写(只在to_char中支持)。 |
| TZH | 时区时间 |
| TZM | 时区分钟 |
除了这些格式外,PostgreSQL还为PostgreSQL转换DateTime为日期的操作提供了一些修改器。这些是。
| 修改器 | 说明 | 例子 |
| FM前缀 | 填充模式(抑制前导零和填充空白)。 | FMMonth |
| TH后缀 | 以大写字母列出序号后缀 | DDTH,例如,第07个 |
| TH后缀 | 列出小写的序号后缀 | DDTH,例如,第07届 |
| FX前缀 | 使用固定格式的全局选项 | FX月DD日 |
| TM前缀 | 翻译模式 | TMMonth |
| SP后缀 | 拼写模式 | DDSP |
你可以在PostgreSQL文档中参考PostgreSQL使用格式或修饰符来格式化日期的用法说明。
回到我们的问题,即Postgres将时间戳转换为日期,这时你可能想知道如何使用这些选项。
这里有一个例子来帮助你理解。让我们使用我们前面所举的customer_transactions时间戳列的同样例子。当你执行这样的一个SQL查询时。
SELECT
customer_transaction,
TO_CHAR(
customer_transaction,
'HH12:MI:SS'
) transaction_time
FROM
customers;
PostgreSQL中的TO_CHAR()函数 通过 从customer_transaction时间戳列中提取时间并转换为12小时格式,返回一列 transaction_time 。
下面是结果的样子。
| customer_transaction | 交易时间 |
| 2022-05-11 22:16:43 | 10:16:43 |
| 2022-05-11 22:18:37 | 10:18:37 |
| 2022-05-12 23:24:40 | 11:24:40 |
| 2022-05-12 20:19:57 | 08:19:57 |
同样,像这样的SQL查询将帮助你从customer_transactions时间戳列中提取日期。
SELECT
customer_transaction,
TO_CHAR(
customer_transaction,
‘dd:mm:yyyy'
) transaction_date
FROM
customers;
| customer_transaction | 交易_时间 |
| 2022-05-11 22:16:43 | 2022-05-11 |
| 2022-05-11 22:18:37 | 2022-05-11 |
| 2022-05-12 23:24:40 | 2022-05-12 |
| 2022-05-12 20:19:57 | 2022-05-12 |
PostgreSQL格式的日期提取也可以在当前时间戳上进行,使用TO_CHAR()与now()函数结合使用。
SELECT TO_CHAR(NOW() :: DATE, 'dd-mm-yyyy');
Output:
to_char
------------
23-06-2022
(1 row)
这个SQL查询将从当前时间戳中提取格式为'dd-mm-yyy'的日期。如果你想只选择日号,你可以使用下面的SQL查询。
SELECT TO_CHAR(NOW() :: DATE, 'dd');
to_char
---------
23
(1 row)
你可以有多种日期格式供你选择,使用上面格式表中提到的不同格式。在 "SELECT "语句的帮助下,当前日期最终转换为你在查询中指定的格式,这些参数最终被传递给 "TO_CHAR "函数,将显示在控制台。接下来,在我们的PostgreSQL转换DateTime为日期的指南中,我们将讨论EXTRACT()函数。
是什么让Hevo的ETL流程成为同类中最好的?
如果你有大量的数据,提供一个高质量的ETL解决方案可能是一个困难的任务。Hevo的 自动化,无代码ETL平台使你拥有顺利的数据复制经验所需的一切。
看看是什么让Hevo如此神奇。
- 完全管理。Hevo不需要管理和维护,因为它是一个完全自动化的平台。
- 数据转换。Hevo提供了一个简单的界面来完善、修改和充实你要传输的数据。
- 更快的洞察力生成。Hevo提供近乎实时的数据复制,所以你可以获得实时的洞察力生成和更快的决策。
- 模式管理。Hevo可以自动检测传入数据的模式,并将其映射到目标模式。
- 可扩展的基础设施。Hevo有内置的100多个数据源的集成,如PostgreSQL(有40多个免费的数据源),可以帮助你根据需要扩展你的数据基础设施。
- 实时支持。Hevo团队24小时不间断地通过聊天、电子邮件和支持电话向客户提供特殊支持。
PostgreSQL使用EXTRACT()函数将日期时间转换为日期
在本节中,我们将讨论PostgreSQL的**EXTRACT()**函数。在PostgreSQL中,EXTRACT()函数有助于从DateTime中获取日期子字段,如年或小时。有时你可能只想提取日期的一个特定部分,比方说,日历年、月或日,在这些情况下,你可以使用EXTRACT()函数。
PostgreSQL的EXTRACT()函数的语法如下。
EXTRACT(field FROM source)
EXTRACT()函数接收两个参数,字段和源。字段参数指定了要从DateTime值中提取的日期部分,即月、旬、小时。源参数是一个TIMESTAMP或INTERVAL类型的值。
同样,PostgreSQL在字段参数下提供了很多选项。下面列出了这些选项。
| 字段值 | TIMESTAMP | 间隔 |
| 世纪 | 世纪 | 世纪的数量 |
| 日 | 每月的一天(1-31)。 | 天数 |
| 年(DOY | 年的一天(1-366)。 | 不适用 |
| DOW | 一周的日子(周日(0)至周六(6))。 | 不适用 |
| EPOCH | 自1970-01-01 00:00:00 UTC起的时间(秒数)。 | 区间内的秒数 |
| 小时(HOUR) | 一天中的小时(0-23) | 小时数 |
| 微秒(MICROSECONDS) | 秒字段,包括小数部分,乘以1000000 | 秒字段,包括小数部分,乘以1000000 |
| 千年(MILLENNIUM | 千禧年 | 千禧年的数量 |
| 毫秒(MILLISECONDS | 秒字段,包括小数部分,乘以1000 | 秒字段,包括小数部分,乘以1000 |
| MINUTE | 每小时的分钟数(1-59)。 | 分钟数 |
| 月 | 年的月份(1-12) | 月的数量,模数(0-11)。 |
| 第四季度 | 一年中的季度 | 季度数 |
| 秒 | 每小时的秒数(1-59) | 秒的数量 |
| 时区 | 时区与UTC的偏移,以秒计 | 不适用 |
| TIMEZONE_HOUR | 时区的小时成分 | 不适用 |
| 时区_分钟 | 时间区的分钟部分 | 不适用 |
| 周数 | ISO 8601的周数,即一年中的第几周。 | 不适用 |
| 年 | 日历年 | 日历年 |
要使用EXTRACT()函数进行PostgreSQL转换DateTime为日期的操作,我们已经列出了一些例子。
在PostgreSQL的格式化日期中,从一个给定的时间戳中提取一个月份。
SELECT EXTRACT(MONTH FROM TIMESTAMP '2022-05-12 18:36:49');
Output:
extract
---------
5
(1 row)
从当前时间戳中提取年、月、日,即使用EXTRACT()函数与now()结合使用。
SELECT
EXTRACT(year FROM now()) as year,
EXTRACT(month FROM now()) as month,
EXTRACT(day FROM now()) as day;
Output:
year | month | day
------+-------+-----
2022 | 6 | 23
(1 row)
再说一遍,在 "SELECT "语句的帮助下,将当前日期最终转换为你指定的格式将显示在你的PostgreSQL控制台。
Postgres使用DATE_PART()函数将日期时间转换为日期
在这一节中,我们将讨论另一个PostgreSQL函数,叫做DATE_PART()。PostgreSQL的DATE_PART()函数是EXTRACT()函数的另一个替代品,EXTRACT()函数从DateTime中获取日期子字段,如年或小时。它有类似的语法,并且接受与EXTRACT()函数中指定的字段和源参数相同的参数。
DATE_PART(field,source)
为了说明DATE_PART()函数如何工作,这里有一些例子。
SELECT DATE_PART('year',TIMESTAMP '2022-05-12');
Output:
date_part
-----------
2022
(1 row)
上面提到的SQL命令从给定的时间戳中提取 "年 "并作为输出显示。要提取日期、月份和年份,你可以运行下面的DATE_PART()命令。
SELECT DATE_PART('day', TIMESTAMP '2022-05-12 07:37:16') d, DATE_PART('month', TIMESTAMP '2022-05-12 07:37:16') m, DATE_PART('year', TIMESTAMP '2022-05-12 07:37:16') y;
Output:
d | m | y
----+---+------
12 | 5 | 2022
(1 row)
这个SQL查询运行PostgreSQL的DATE_PART()函数,从给定的时间戳中逐一得到日(d)、月(m)和年(y)。DATE_PART()函数在提取日期部分时效率很低,因为你必须在同一个查询中运行该函数三次,因为这三个实体不能被一次提取。
相关信息
总结
本指南介绍了五种不同的方法来执行PostgreSQL转换DateTime为日期的操作。我们了解了可用来将时间戳转换为日期的PostgreSQL函数,例如DATE(), TO_CHAR(), EXTRACT(), 和DATE_PART()。虽然有些函数,例如TO_CHAR(),可以用较少的代码完成Postgres将时间戳转换为日期的工作,但其他函数,例如DATE_PART(),需要大量的编写工作来执行。
如果你是一个PostgreSQL用户,使用ETL进行数据分析,将数据复制到仓库中,会变得很苛刻。对于初学者来说,这个问题被夸大了,他们需要大量的资金和资源来雇佣数据工程师和分析师来理解这些数据。
幸运的是,你可以在几分钟内 使用 Hevo建立并开始从PostgreSQL到你喜欢的仓库的数据复制。
Hevo数据与100多个数据源(如PostgreSQL,MySQL和MS SQL Server)的强大集成,使你不仅可以从数据源导出数据并加载数据到目的地,而且还可以转换和丰富你的数据,并使其准备好分析,这样你就可以只关注你的关键业务需求,并使用BI工具进行有洞察力的分析。
Hevo可以让你在几分钟内将你的数据从PostgreSQL数据库复制到你选择的任何数据仓库,如Amazon Redshift, Snowflake, Google BigQuery, 或 **Firebolt,**只需点击几下。
给Hevo一个尝试。在这里注册一个为期14天的完整功能的试用,亲身体验功能丰富的Hevo套件。你也可以查看我们无与伦比的价格,并决定你最适合的计划。
在下面的评论区分享你对学习PostgreSQL转换DateTime为日期操作的想法。如果你有任何问题,请让我们知道。我们很乐意帮助你。