sql - 在postgres中将日期字段转换为多个字段的最快方法

标签 sql postgresql postgresql-9.1

我有一个包含大约 100.000 行的表,其中包含一个特定的可为 null 的日期字段,我需要将其转换为多列。这些列可通过 View 访问。

为了简化起见,假设我要连接两个名为 tab1 和 tab2 的表,除了 tab1 中的日期字段外,这两个表的内容并不重要

到目前为止,我得出的解决方案如下:

create view result_view as 
   select to_char(t1.date, 'YYYY') AS year,
          to_char(t1.date, 'MM') AS month,
          to_char(t1.date, 'YYYY-MM-DD') AS day,
          t2.value as value
   from tab t1 left join tab2 t2 on t1.id = t2.id;

目前的解决方案很耗时,有什么优化吗?

最佳答案

I have a very big table containing about 100.000 rows,

这不是很大 ;)

explain (analyze, buffers) 下运行查询以查看时间丢失的位置。

除此之外,我建议使用 extract 而不是 to_char

例如extract(YEAR from t1.date) 等。

Extract 是 SQL 标准并返回数字,而不是字符串。这通常是需要的。

有关提取物的更多信息:http://modern-sql.com/feature/extract

关于sql - 在postgres中将日期字段转换为多个字段的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46710284/

相关文章:

sql - Oracle - INSERT RANDOMLY 生成的英文单词作为虚拟数据

sql - 如何从过去 x 个月的 Postgres Sql 查询中获取数据,其中日期字段是时间戳?

c# - 如何将输入数据发送到 Postgres psql.exe?

postgresql - 从 DO 语句中的查询中获取结果

database - Postgresql:如何应用 pg_dump --exclude-table-data 补丁?

mysql - 在 MariaDB 10.2.15 中使用 CASE WHEN DATE 语句

php - 使 SQL 查询的第一个和最后一个结果唯一的最佳方法?

mysql - 我可以在触发器上的 SELECT INTO 语句内部使用 SUM() 吗?

postgresql - 如何使用字符串作为 PostgreSQL 咨询锁的键?

php - 如何集中重复使用但每次使用不同分区的复杂窗口查询