PostgreSQL 选择最接近的上一个月六月



我正在尝试为6月1日之后最接近的查询写一篇文章。 例如,今天是 10/2/2018。 如果我今天运行查询,我需要它使用日期 6/1/2018。 如果我在 5 年 29 月 2019 日运行它,它仍然需要抓取 6 年 1 月 2018 日。 如果我在 6 年 2 月 2019 日运行它,它应该抓取 6 年 1 月 2019 日。 如果我在 2022 年 6 月 2 日运行它,它应该抓取 6 年 1 月 2022 日,依此类推。

我相信我需要从这样的事情开始:

SELECT CASE WHEN EXTRACT(MONTH FROM NOW())>=6 THEN 'CURRENT' ELSE 'RF LAST' END AS X
--If month is greater than or equal to 6, you are in the CURRENT YEAR (7/1/CURRENT YEAR)
--If month is less than 6, then reference back to the last year (YEAR MINUS ONE)

我相信我需要截断日期然后执行操作。 我不确定要采取哪种方法(如果我应该在时间戳中添加年份,例如"6/1/1900",或者我是否应该尝试拆卸日期部分以执行操作。 我在尝试中不断收到错误,例如"运算符不存在"。 我尝试过的事情包括:

SELECT (CURRENT_DATE- (CURRENT_DATE-INTERVAL '7 months'))
--This does not work as it just gives me a count of days.
SELECT (DATE_TRUNC('month',NOW())+TIMESTAMP'1900-01-01 00:00:00')
--Variations of this just don't work and generally error out.

使用大小写表达式来确定是否需要使用当前年份或上一年(第 1 个月到第 5 个月(

case when extract(month from current_date) >= 6 then 0 else -1 end

然后将其添加到从current_date中提取的年份中,例如使用to_date()

select to_Date('06' || (extract(year from current_date)::int + case when extract(month from current_date) >= 6 then 0 else -1 end)::varchar, 'mmYYYY');

您也可以在 postgres 9.4+ 中使用make_date(year int, month int, day int)

select make_date(extract(year from current_date) + case when extract(month from current_date) >= 6 then 0 else -1 end, 6, 1) ;

如果月份低于 6,则为截断年和负 6 个月。 否则截断年份并添加 6 个月。

set datestyle to SQL,MDY;
select 
case when (extract( month from (date::date)))<6 then date_trunc('year',date)-'6 month'::interval 
else date_trunc('year',date)+'6 months'::interval 
end as closest_prev_june,
another_column,
another_column2
from mytable;

但是格式是默认的,假设您有一个名为日期的列。

如果要使用 now(( 执行此操作,请使用 now(( 更改日期列 功能。

相关内容

  • 没有找到相关文章

最新更新