PostgreSQL中EXTRACT(时间戳的年份)函数和date_part('year',时间戳)之间的区别

Sum*_*rav 5 postgresql

我正在使用PostreSQl服务器,并且必须按时间戳记的日期部分分组数据(即按月,年或周分组),所以我正在使用该Extract(year from timestamp)函数,但是我在Postgresql文档中看到也有一个函数date_part('year',timestamp)可以执行相同。在这里,我混淆了我必须使用哪个功能以及哪个功能将是有效的。还请告诉我是否还有另一种很好的方法来获取日期部分的数据。

a_h*_*ame 10

他们都是一样的。

实际上,它extract()被重写为date_part()-检查执行计划,您将看到。

extract()符合SQL标准,date_part()是Postgres特定的查询。当一个转换为另一个时,绝对没有性能差异。如果您喜欢编写标准的SQL,请坚持extract()

  • `事实上 extract() 被重写为 date_part()` - 不再是了!比较[9.6](https://dbfiddle.uk/?rdbms=postgres_9.6&fiddle=44f497752db36630de2abb55b90ab69a)(高达13.4),**但是**[14.1](https://dbfiddle.uk/?rdbms=postgres_14&fiddle= 44f497752db36630de2abb55b90ab69a)!不知道为什么会出现这种情况......谷歌搜索 - 什么也没有! (3认同)

小智 8

我引用了 Postgresql.org 的答案

Blockquote EXTRACT 语法最终作为对内部 date_part(...) 函数的调用。如果 SQL 可移植性不是问题,直接调用 date_part() 应该会快一些。

参考链接