You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PostgreSQL中如何将带时区的时间戳转换为仅显示年份(YYYY)的格式

PostgreSQL中如何将带时区的时间戳转换为仅显示年份(YYYY)的格式

嘿,别着急,这个问题其实很好解决,我来一步步帮你理清楚:

首先你提到试过to_char没成功,大概率是用法没搞对——PostgreSQL里的to_char完全能满足你的需求,而且非常好用!另外要注意,date_parse是MySQL专属的函数,PostgreSQL根本没有这个,所以用它肯定行不通哦。

情况1:只是查询时临时显示年份(不修改表结构)

如果你的列类型确实是timestamp with time zone,直接用to_char函数把时间戳格式化为四位年份就可以了。假设你的列名叫your_time_column,表名叫your_table,执行下面的SQL:

SELECT to_char(your_time_column, 'YYYY') AS year FROM your_table;

比如你给出的那个时间戳Wed Dec 31 2008 19:00:00 GMT -0500 (Eastern Time Zone),用这个语句就能直接得到2008

情况2:想永久修改表结构,把列改成只存年份

如果你希望直接把表中的列替换成年份(比如存为整数类型),可以按以下步骤操作:

  1. 先给表添加一个新的整数列用来存储年份:
ALTER TABLE your_table ADD COLUMN year_column INTEGER;
  1. 把原时间戳列的年份值更新到新列里:
UPDATE your_table SET year_column = EXTRACT(YEAR FROM your_time_column)::INTEGER;

这里用EXTRACT(YEAR FROM ...)可以直接提取年份的数值,再转成整数类型更实用。
3. 如果不需要原来的时间戳列了,可以删掉它:

ALTER TABLE your_table DROP COLUMN your_time_column;

对了,你看到的Wed Dec 31 2008 19:00:00 GMT -0500 (Eastern Time Zone)其实是客户端工具(比如psql或者可视化工具)的显示格式,PostgreSQL内部存储timestamp with time zone的格式可不是这样的,所以不用纠结这个显示样式,直接操作列本身就好啦。

备注:内容来源于stack exchange,提问作者Pags33

火山引擎 最新活动