postgresql - 关于时区的 PostgreSQL 提取函数
问题描述
我使用 PostgreSQLextract
函数来提取月份、季度、年份,如下所示:
select extract (month from adate) from atable
adate
是一个timestamp with time zone
。
我遇到的问题是我发现这个函数与时区完全矛盾,我正在处理一个数据库,其中的数据因时区而异。因此,在某些情况下,我需要有关太平洋时区的结果,而在其他情况下,我需要有关 EST 或 CST 等的结果。
有没有办法获取特定时区的日期的月份/季度/年份?
解决方案
基本上你所做的是使用AT TIME ZONE
运算符将其转换TIMESTAMP WITH TIMEZONE
为 aTIMESTAMP WITHOUT TIMEZONE
然后将 date_part (AKA 提取)操作应用于该
如果你想要一个特定的时区:
select extract(month from adate AT TIME ZONE 'CST' ) from atable;
如果您想要一个特定的位置:这将遵循过去日期的历史夏令时规则(和其他法定时区更改),并假定未来日期的当前规则。
select extract(month from adate AT TIME ZONE 'America/Detroit' ) from atable;
也许使用过的定义函数将有助于休眠。
CREATE OR REPLACE FUNCTION date_part_in_zone
( part text, instant timestamptz, zone text)
returns double precision language sql as
'SELECT date_part(part, instant AT TIME ZONE zone)';
上面的 date_part 是“提取”背后的功能之一。
推荐阅读
- python - 如何使用 Reddit API 在我的 HTML 文件中呈现图像
- php - 通过控制台而不是通过 Web 提供 array[] 参数
- vue.js - Nuxt Vuex Store - 模块化方法的问题
- hive - pyspark 中的 spark.sql - 无法实例化 org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
- dashing - 潇洒的仪表板。如何将“updatedAtMessage”更改为十二小时?
- react-native - 反应原生 iOS 构建问题 - glog - 使用未声明的标识符“SYS_gettid”
- sass - 如何处理 SASS 并且只获得“颜色”属性并丢弃其余部分?
- javascript - 交易视图小部件它向我显示错误
- c# - 如何在 Visual Studio 2019 中创建 .NET framework 4.6 版本的 XUnit 项目?
- php - 按月份过滤数据