1. 程式人生 > >postgresql根據查詢日期所在月份的週數查詢去年該月份對應週數的日期

postgresql根據查詢日期所在月份的週數查詢去年該月份對應週數的日期

--  DROP FUNCTION get_last_month_day_by_week(timestamp without time zone);
create or replace function get_last_year_day_by_week(in _date timestamp)
returns varchar  as $$
declare _this_year_week_date timestamp[]='{}';-- 查詢日期所在月份的所有的_this_date_week的日期
declare _last_year_week_date timestamp[]='{}';-- 查詢日期去年所在月的所有的_this_date_week的日期
declare _date_row record;
declare _date_array_item timestamp;-- 查詢日期所在月份的所有的_this_date_week的日期的某一元素
declare _date_array_length int;-- 查詢日期所在月份的所有的_this_date_week的日期陣列長度
declare _date_array_i int;-- 查詢日期所在月份的所有的_this_date_week的日期陣列index
declare _this_date_month_week_index int;-- 記錄查詢日期是本月的第幾個周_this_date_week**
declare _this_date_last_month_same_week timestamp;-- 記錄查詢日期去年這個月的第幾周_this_date_week日期**
declare _this_date_week int;-- 記錄查詢日期是星期幾**
declare _this_date_year int;-- 記錄查詢日期年
declare _this_date_month int;-- 記錄查詢日期月
declare _this_date_day int;-- 記錄查詢日期日
declare _this_date_first_day timestamp;-- 記錄查詢日期這個月第一天
declare _this_date_last_day timestamp;-- 記錄查詢日期這個月最後一天
declare _this_date_last_year_first_day timestamp;-- 記錄查詢日期去年這個月第一天
declare _this_date_last_year_last_day timestamp;-- 記錄查詢日期去年這個月最後一天
begin 
select extract(year from _date),extract(month from _date),extract(day from _date),extract(dow from _date)
into _this_date_year,_this_date_month,_this_date_day,_this_date_week; 
if _this_date_month=12 then  
_this_date_last_year_first_day=to_timestamp( ''||(_this_date_year-1)||'-12-01','yyyy-MM-dd');
_this_date_last_year_last_day=to_timestamp( ''||(_this_date_year-1)||'-12-31','yyyy-MM-dd') ; 
  _this_date_first_day=to_timestamp( ''||_this_date_year||'-12-01','yyyy-MM-dd');
_this_date_last_day=to_timestamp( ''||_this_date_year||'-12-31','yyyy-MM-dd');
else  
_this_date_last_year_first_day=to_timestamp( ''||(_this_date_year-1)||'-'||_this_date_month||'-01','yyyy-MM-dd');
_this_date_last_year_last_day=to_timestamp( ''||(_this_date_year-1)||'-'||(_this_date_month+1)||'-01','yyyy-MM-dd')+'-1 day';
_this_date_first_day=to_timestamp( ''||_this_date_year||'-'||_this_date_month||'-01','yyyy-MM-dd');
_this_date_last_day=to_timestamp( ''||_this_date_year||'-'||(_this_date_month+1)||'-01','yyyy-MM-dd')+'-1 day';
end if;
 
-- raise info '_this_date_last_year_first_day:%',_this_date_last_year_first_day;
--   raise info '_this_date_last_year_last_day:%',_this_date_last_year_last_day;
-- raise info '_this_date_first_day:%',_this_date_first_day;
--   raise info '_this_date_last_day:%',_this_date_last_day; 
-- raise info '_this_date_week:%',_this_date_week;
for _date_row in select date_val::timestamp 
from  generate_series(_this_date_first_day,_this_date_last_day,'1 day') date_val 
where extract(dow from date_val)=_this_date_week 
loop
_this_year_week_date=_this_year_week_date||_date_row.date_val;
-- raise info '%',_date_row.date_val;
end loop;

_date_array_length=array_length(_this_year_week_date,1);
for _date_array_i in 1.._date_array_length loop 
if _this_year_week_date[_date_array_i]=_date then 
_this_date_month_week_index=_date_array_i;
-- raise info '_date_array_i:%',_date_array_i;
exit;
end if; 
end loop;
if _this_date_month_week_index is null then 
_this_date_month_week_index=0;
return '';
end if;
-- raise info '%',_this_year_week_date;

 
for _date_row in select date_val::timestamp 
from  generate_series(_this_date_last_year_first_day,_this_date_last_year_last_day,'1 day') date_val 
where extract(dow from date_val)=_this_date_week 
loop
_last_year_week_date=_last_year_week_date||_date_row.date_val;
-- raise info 'last month : %',_date_row.date_val;
end loop;

_date_array_length=array_length(_last_year_week_date,1);
if _date_array_length<_this_date_month_week_index then 
return '';
end if;
_this_date_last_month_same_week=_last_year_week_date[_this_date_month_week_index] ;
--    raise info '_this_date_last_month_same_week : %',_this_date_last_month_same_week;
return _this_date_last_month_same_week;
end ;
$$ language plpgsql




;select last_month from get_last_year_day_by_week('2018-7-2'::timestamp) last_month

相關推薦

postgresql根據查詢日期所在月份查詢去年月份對應日期

--  DROP FUNCTION get_last_month_day_by_week(timestamp without time zone);create or replace function get_last_year_day_by_week(in _date ti

根據當前第幾周,獲取這一日期,(問題關鍵是獲取月份的第幾天即可)

解決思路:   獲取當前月份的第幾天。在此程式中為了方便,我把12月份設定了32天,(大家可以修改一下,根據條件設定成31天,增加一下if條件即可) #include "stdafx.h" #include <iostream> using namespace std; int _tmai

SQL Server資料庫中查詢含有某個欄位的表及表記錄條

SELECT object_name(sc.id) as TableName, sc.Name as ColumnName, si.rows as RowCounts FROM SysColumns sc LEFT JOIN SysObjects so ON sc.id =

sql函: 多級樹狀目錄-OA信用盤源碼下載根據父ID查詢有的子ID

reat mes 部門 rtm table rip rec ins etime 比如說部門,OA信用盤源碼下載聯系方式:QQ:2747044651 網址http://zhengtuwl.com 有上級部門,是多級的,需要根據部門ID查詢出所有該部門的子部門。

見過的最簡短、最靈活的javascript日期轉字符串工具函

var gets java cti return -m func date 靈活 我們知道javascript的Date對象並沒有提供日期格式化函數。將日期對象轉換成"2015-7-02 20:35:11"等這樣的格式又是項目中非經常常使用的需求。近期在我們項目中看到了

【Sql Server函日期時間函日期查詢今天、昨天、7天內、30天的

本周 varchar last 類型 nth weight 所有 convert ted 今天的所有數據:select * from 表名 where DateDiff(dd,datetime類型字段,getdate())=0 昨天的所有數據:select * from

伺服器記憶體線性增長,根據控制代碼查詢問題程序 伺服器記憶體佔用不斷的增加 & 工作管理員(PF使用率)不斷的增加:關注控制代碼(轉)

伺服器修改成nignx+xxfm之後 訪問速度變快了很多。但是伺服器記憶體每天線性增長30M左右。 網上找了很多資料都不行。根據這篇文章伺服器記憶體佔用不斷的增加 & 工作管理員(PF使用率)不斷的增加:關注控制代碼數(轉) 檢視所有程序的控制代碼數,發現xxfm.exe程序的控制代碼數有3萬多,

根據指定日期獲取月份根據當前第幾周獲取自然周的起始日期

// 獲取指定日期內月份的起始日期 protected function to_month($begin_at , $end_at) { $month1 = explode("-", $begin_at); $month2 = explode(

SSIS 根據查詢庫中的年月按月迴圈輸出CSV檔案並動態以月份命名

SSIS 根據查詢庫中的年月按月迴圈輸出CSV檔案並以該月份命名。 先看一下整體結構。 控制流: 資料流: 首先我們先做一個執行sql任務,配置如下: 結果集配置: 注意結果集中的變數是Object型別的,因為返回的是結果集型別。要是單個數據則該變數為Str

從下拉框中選擇年份和年的,計算出周的開始日期和結束日期

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <h

Mysql根據時間的月份進行分組查詢

create_time時間格式 SELECT DATE_FORMAT(create_time,'%Y%u') weeks FROM role GROUP BY weeks;

sql 根據日期模糊查詢&SQL Server dateTime型別 模糊查詢

曾經遇到這樣的情況,在資料庫的Meeting表中有PublishTime (DateTime,8)欄位,用來儲存一個開會時間,在存入時由於要指明開會具體時間,故格式為yyyy-mm-dd hh:mm:ss,而我們查詢時是通過yyyy-mm-dd來進行的,即查詢某一天的所有會

java按照日期查詢查詢不到結束日期對應的資料

效果如下:可以查到結束日期的資料: 原因(1):仔細檢查所查詢日期內是否有資料 (2):如有資料:就需要對時間進行加減 因為所選時間只可以截至到00:00;比如查詢到2016-11-11的資料

sqlserver 關聯查詢 charindex 函 查詢慢,不使用索引問題解決辦法

單個 索引 觸發 其中 關鍵字 函數 pla select replace 問題:   兩張表 數據都非常多 A表中A1字段 需要關聯B表主鍵 查詢 A1 字段 存儲多個B表主鍵   格式為:     格式1:b1,b2,b3     格式2:b4

『TensorFlow』函查詢列表_數值計算

code -1 .com term tran als pos ble sparse 基本算術運算 操作描述 tf.add(x, y, name=None) 求和 tf.sub(x, y, name=None) 減法 tf.mul(x, y, name=

mysql查詢今天,昨天,近7天,近30天,本月,上一月據的SQL

sub color .com http rac from per 嘗試 bold 原文:http://www.open-open.com/code/view/1423207309170 select * from ad_proTrack_t where to_day

DataTables添加額外的查詢和刪除columns等無用參

blog val load order amp pan 表格 額外 columns //1.定義全局變量 var iStart = 0, searchParams={}; //2.配置datatable的ajax配置項 "ajax": { "url

解決query查詢輸入geometry參查詢不到而通過where條件可以查到的問題

gis 查詢參數 數據 ron http 顯示 src 出現 ren 解決query查詢輸入geometry參數查詢不到而通過where條件可以查到的問題 原因: 是因為geometry的坐標系和所要查詢的圖層不一樣導致的(問題引起是由於底圖中疊加了不同的坐標系的引起的)

快照會話查詢

快照會話數查詢SELECT A.SNAP_ID, TO_CHAR(B.END_INTERVAL_TIME, ‘mm-dd_hh24:mi‘) SNAP_TIME, SUM(DECODE(A.STAT_NAME, ‘logons current‘, A.VALUE, 0)) LOGON_

SQL語句來查詢今天、昨天、7天內、30天的據,經典!

diff 指定 first 內容 輸出 har edi time nth ---恢復內容開始--- 今天的所有數據:select * from 表名 where DateDiff(dd,datetime類型字段,getdate())=0 昨天的所有數據:select *