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

Sql 在postgres中将日期字段转换为多个字段的最快方法,sql,postgresql,postgresql-9.1,Sql,Postgresql,Postgresql 9.1,我有一个包含大约100.000行的表,其中有一个特定的可为空的日期字段,我需要将其转换为多个列。这些列可以通过视图访问 为了简化起见,假设我连接了两个名为tab1和tab2的表,这两个表的内容除了tab1中的date字段之外没有什么重要意义 到目前为止,我得出的解决方案如下: create view result_view as select to_char(t1.date, 'YYYY') AS year, to_char(t1.date, 'MM') AS mon

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

为了简化起见,假设我连接了两个名为tab1和tab2的表,这两个表的内容除了tab1中的date字段之外没有什么重要意义

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

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;
当前的解决方案花费了这么多时间,有优化吗

我有一张很大的桌子,大约有10万行

那不是很大;)

explain(analyze,buffers)
下运行查询,查看时间损失在哪里

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

例如,
摘录(从t1.日期算起的年份)

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


关于摘录的更多信息:

所花的时间没有花在
to_char
上,此处的描述被修改为更详细地描述问题objectively@rachidelkedmiri你已经从问题中删除了很大的字眼。但是你没有听从我的建议。是的。extract、date_part或@MarkusWinand使用extract可将运行时间减少一半