postgresql日期相关的截取和计算

前端之家收集整理的这篇文章主要介绍了postgresql日期相关的截取和计算前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
select  
	half_month,case when half_month like '%15' then all_pv/15
		  when half_month like '%28' then all_pv/13
		  when half_month like '%30' then all_pv/15
		  when half_month like '%31' then all_pv/16
          when half_month like '%' || substr(to_char(%end_date%,'99999999'),8,2) and  substr(to_char(%end_date%,2)>='16'  
			then all_pv/(cast(substr(to_char(%end_date%,2) as int) - 16 + 1)
          when half_month like '%' || substr(to_char(%end_date%,2) <'15'  
			then all_pv/(cast(substr(to_char(%end_date%,2) as int) - 1 + 1)
	end as all_pv,case when half_month like '%15' then webservice_pv/15
		  when half_month like '%28' then webservice_pv/13
		  when half_month like '%30' then webservice_pv/15
		  when half_month like '%31' then webservice_pv/16
		  when half_month like '%' || substr(to_char(%end_date%,2)>='16'  
			then webservice_pv/(cast(substr(to_char(%end_date%,2) <'15'  
			then webservice_pv/(cast(substr(to_char(%end_date%,2) as int) - 1 + 1)
	end as webservice_pv,case when half_month like '%15' then part_all_pv/15
		  when half_month like '%28' then part_all_pv/13
		  when half_month like '%30' then part_all_pv/15
		  when half_month like '%31' then part_all_pv/16
		  when half_month like '%' || substr(to_char(%end_date%,2)>='16'  
			then part_all_pv/(cast(substr(to_char(%end_date%,2) <'15'  
			then part_all_pv/(cast(substr(to_char(%end_date%,2) as int) - 1 + 1)
	end as part_all_pv,case when location_pv = 0 then 0.0 else (
		case when half_month like '%15' then location_pv/15
		     when half_month like '%28' then location_pv/13
		     when half_month like '%30' then location_pv/15
		     when half_month like '%31' then location_pv/16
     		 when half_month like '%' || substr(to_char(%end_date%,2)>='16'  
				then location_pv/(cast(substr(to_char(%end_date%,2) as int) - 16 + 1)
          	 when half_month like '%' || substr(to_char(%end_date%,2) <'15'  
				then location_pv/(cast(substr(to_char(%end_date%,2) as int) - 1 + 1)
		end ) end as location_pv
from (
select 
	 case when substr(to_char(f_date,2)  >=  '01'  --在01-15之间,f_date 月份<当前所选的月份 显示01-15
		  and substr(to_char(f_date,2)  <= '15'  
		  and substr(to_char(f_date,1,7) < substr(to_char(%end_date%,7)  				
	        then concat(substr(to_char(f_date,7),'01~',substr(to_char(f_date,'15')        
	when substr(to_char(f_date,2)  >=  '01'  ----在01-15之间,f_date 月份=当前所选的月份,且%end_date% >=15,显示01-15
		 and substr(to_char(f_date,2)  <= '15'   
		 and substr(to_char(f_date,7) = substr(to_char(%end_date%,7) 
		 and substr(to_char(%end_date%,2) >= '15' 
	        then concat(substr(to_char(f_date,'15')	
	when substr(to_char(f_date,2)  >=  '01'    ----在01-15之间,f_date 月份=当前所选的月份,且%end_date% <15,显示01-end_date
		 and substr(to_char(f_date,2) < '15' 
	        then concat(substr(to_char(f_date,'%end_date%')

	when  substr(to_char(f_date,2)  >=  '16'   --在16-月末之间,f_date 月份<当前所选的月份 显示16-月末;每个月天数不同,根据具体天数显示
		  and substr(to_char(f_date,7)  						
	        then concat(substr(to_char(f_date,'16~',case   when  substr(to_char(f_date,6,2) in ('01','03','05','07','08','10','12') then 31
							when substr(to_char(f_date,2) in ('02') then 28
					 else 30 
				end ) 
	when  substr(to_char(f_date,2)  >=  '16'   --在16-月末之间,f_date 月份=当前所选的月份 且%end_date%>15,显示16-end_date;
		  and substr(to_char(f_date,7)  
		  and substr(to_char(%end_date%,2) > '15' 
	        then concat(substr(to_char(f_date,'%end_date%')                 
	end as half_month,sum(pv)  as all_pv,sum(case when type in ('webservice') then pv else 0 end) as webservice_pv,sum(case when type in ('jsAPI','H5','map_sdk','static_map') then pv else 0 end) as part_all_pv,sum(case when type ='location_sdk'  then pv else 0 end) as location_pv
from (
select xx from xxx 	
  ) temp
where f_date >= %begin_date% and f_date <= %end_date%		 
group by  --substr(to_char(f_date,7) as f_month
case when substr(to_char(f_date,'%end_date%')                 
	end
) t
 
select
	f_month,all_pv / 
	    (case when substr(f_month,'12') and f_month  < substr(to_char(%end_date%,7) then 31
      when substr(f_month,2) in ('02') and  f_month < substr(to_char(%end_date%,7) then 28
      when substr(f_month,2) in ('04','06','09','11') and f_month < substr(to_char(%end_date%,7) then 30 
      when f_month = substr(to_char(%end_date%,7) then  cast(substr(to_char(%end_date%,2) as int)     
 end ) as all_pv,webservice_pv /
		(case when substr(f_month,2) as int)     
 end ) as webservice_pv,part_all_pv /
		(case when substr(f_month,2) as int)     
 end ) as part_all_pv,case when location_pv = 0 then 0  else location_pv / 
		(case when substr(f_month,2) as int)     
 end ) end as location_pv
from (
select 
	substr(to_char(f_date,7) as f_month,sum(pv) 
          as all_pv,sum(case when type ='location_sdk'  then pv else 0 end) as location_pv
from (
	
  ) temp
where f_date >= %begin_date% and f_date <= %end_date%		 

group by substr(to_char(f_date,7)
  ) t

猜你在找的Postgre SQL相关文章