我是查询中的新手,我只想提取月份和年份,那么我该如何做呢?我尝试使用date_part,但它只提取月份
select
case when
date_part('day', now()) >=25 then date_part('month', now())
else date_part('month', now())-1 end有人能帮我吗?
发布于 2017-08-12 18:50:43
您可以使用EXTRACT函数从DATE中提取月、年、日。
下面是查询,您可以使用它来实现您所发布的内容。
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
编辑
如果您想同时提取月份和年份,请分别提取并连接它。下面是更新后的查询。
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
发布于 2017-08-12 18:52:44
您的查询可以完美地工作。
请参阅this demo:
今天是2017-08-12,查询一如预期给出了8-1 = 7
select
case when date_part('day', now()) >=25
then date_part('month', now())
else date_part('month', now())-1
end
;
| case |
|------|
| 7 |另外两种情况也很好用:
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 |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 |发布于 2017-08-12 21:21:24
我真的不知道你想要的结果是什么,但是要从date中提取年/月/其他任何东西,你可以使用TO_CHAR函数。
例如:
select to_char(current_timestamp, 'YYYY'), to_char(current_timestamp, 'MONTH');
select to_char(current_timestamp, 'YYYY-MM');要将分钟/小时/天/月/年添加到日期,请使用interval运算符,如下所示:
select to_char(now() + interval '1' month, 'YYYY-MM');您可以一次添加多个间隔:
select to_char(now() + interval '1' month + interval '-1' year, 'YYYY-MM');https://stackoverflow.com/questions/45649137
复制相似问题