首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Postgres中仅获取月份和年份

如何在Postgres中仅获取月份和年份
EN

Stack Overflow用户
提问于 2017-08-12 18:21:54
回答 4查看 7.4K关注 0票数 1

我是查询中的新手,我只想提取月份和年份,那么我该如何做呢?我尝试使用date_part,但它只提取月份

代码语言:javascript
复制
select 
case when 
date_part('day', now()) >=25 then date_part('month', now())
else date_part('month', now())-1 end

有人能帮我吗?

EN

回答 4

Stack Overflow用户

发布于 2017-08-12 18:50:43

您可以使用EXTRACT函数从DATE中提取月、年、日。

下面是查询,您可以使用它来实现您所发布的内容。

代码语言:javascript
复制
SELECT CASE
           WHEN (extract(DAY
                         FROM CURRENT_DATE) >= 25) THEN (extract(MONTH
                                                                 FROM CURRENT_DATE))
           ELSE (extract(MONTH
                         FROM CURRENT_DATE) - 1)
       END;

结果:

因为今天是这个月的第12天,所以它返回7(前一个月)。您可以查看演示here

编辑

如果您想同时提取月份和年份,请分别提取并连接它。下面是更新后的查询。

代码语言:javascript
复制
SELECT CASE
           WHEN (extract(DAY
                         FROM CURRENT_DATE) >= 25) THEN (extract(MONTH
                                                                 FROM CURRENT_DATE) || ', ' || extract(Year FROM CURRENT_DATE))
           ELSE (extract(MONTH
                         FROM CURRENT_DATE) - 1 || ', ' || extract(Year FROM CURRENT_DATE))
       END;

查看演示here

票数 1
EN

Stack Overflow用户

发布于 2017-08-12 18:52:44

您的查询可以完美地工作。

请参阅this demo:

今天是2017-08-12,查询一如预期给出了8-1 = 7

代码语言:javascript
复制
select 
case when date_part('day', now()) >=25 
     then date_part('month', now())
     else date_part('month', now())-1 
end
;

| case |
|------|
|    7 |

另外两种情况也很好用:

代码语言:javascript
复制
select 
case when date_part('day', date '2017-08-12') >=25 
     then date_part('month', date '2017-08-12')
     else date_part('month', date '2017-08-12')-1 
end
;
| case |
|------|
|    7 |

代码语言:javascript
复制
select 
case when date_part('day', date '2017-08-26') >=25 
     then date_part('month', date '2017-08-26')
     else date_part('month', date '2017-08-26')-1 
end
;
| case |
|------|
|    8 |
票数 1
EN

Stack Overflow用户

发布于 2017-08-12 21:21:24

我真的不知道你想要的结果是什么,但是要从date中提取年/月/其他任何东西,你可以使用TO_CHAR函数。

例如:

代码语言:javascript
复制
select to_char(current_timestamp, 'YYYY'), to_char(current_timestamp, 'MONTH');

select to_char(current_timestamp, 'YYYY-MM');

要将分钟/小时/天/月/年添加到日期,请使用interval运算符,如下所示:

代码语言:javascript
复制
select to_char(now() + interval '1' month, 'YYYY-MM');

您可以一次添加多个间隔:

代码语言:javascript
复制
select to_char(now() + interval '1' month + interval '-1' year, 'YYYY-MM');

Here are all template patterns for Date/Time Formatting.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45649137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档