我试图为6月1日过去的最接近的查询写一段。例如,今天是10/2/2018。如果今天运行查询,则需要使用日期6/1/2018。如果我在2019年5月29日运行它,它仍然需要抢在2018年6月1日。如果我在6/2/2019上运行它,则应该在6/1/2019上运行。如果我在6/2/2022上运行它,则应该抓住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.
答案 0 :(得分:1)
使用案例表达式来确定您是否需要使用当前年份或上一年(第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) ;
答案 1 :(得分:0)
如果月份低于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;
但是格式是默认格式,并且假定您有一列名为date的列。
如果要使用now()进行此操作,请使用now()更改日期列 功能。