在postgres中将日期字段转换为多个字段的最快方法
The fastest way to transform date field into multiple fields in postgres
我有一个包含大约 100.000 行的 table,其中包含一个特定的可为空的日期字段,我需要将其转换为多列。这些列可通过视图访问。
为了简化起见,假设我加入了两个 tables,称为 tab1 和 tab2,这两个 tables 的内容并不重要,除了来自 tab1[=11 的日期字段=]
到目前为止,我得到的解决方案如下:
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)
等
提取是 SQL 标准和 returns 数字,而不是字符串。这是经常需要的。
有关提取的更多信息:http://modern-sql.com/feature/extract
我有一个包含大约 100.000 行的 table,其中包含一个特定的可为空的日期字段,我需要将其转换为多列。这些列可通过视图访问。
为了简化起见,假设我加入了两个 tables,称为 tab1 和 tab2,这两个 tables 的内容并不重要,除了来自 tab1[=11 的日期字段=]
到目前为止,我得到的解决方案如下:
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)
等
提取是 SQL 标准和 returns 数字,而不是字符串。这是经常需要的。
有关提取的更多信息:http://modern-sql.com/feature/extract