PostgreSQL/Oracle/Mysql查詢最近12個月寫法


PostgreSQL中查詢前12個月的數據,舉例:

with
seq as (select 1 as rownum union all select 2 as rownum union all select 3 as rownum union all select 4 as rownum union all select 5 as rownum union all select 6 as rownum union all select 7 as rownum union all select 8 as rownum union all select 9 as rownum union all select 10 as rownum union all select 11 as rownum union all select 12 as rownum) select cTime.stt_date AXIS,cTime.ABBREVAXIS "abbrevAXIS",ROUND(nvl(a.VALUE1,0)/10000,2) VALUE1,ROUND(nvl(a.VALUE2,0)/10000,2) VALUE2 from ( select to_char(now()::timestamp + (-(rownum-1) || ' months')::interval,'YYYY-MM') as stt_date,to_char(now()::timestamp + (-(rownum-1)|| ' months')::interval,'MM') as ABBREVAXIS from seq ) cTime

 

 

 -- 在PostgreSQL和Oracle日期對比:

1、查詢前一個月:

Oracle中:

 TRUNC(add_months(sysdate,-1),'MM')

PostgreSQL中:

date_trunc('month',add_months(sysdate,-1))

2、查詢當前月:

Oracle中:

TRUNC(sysdate,'MM'))

PostgreSQL中:

 

 

 date_trunc('month',sysdate)

3、若為天,則day;  若為月,則month;若為周,則week;若為年,則year;若為季度,則quarter

4、查詢當前之前的日期,為負;查詢當前之后的日期,為負。

 

--oracle 未來12個月
SELECT TO_CHAR(ADD_MONTHS(ADD_MONTHS(SYSDATE, 0), ROWNUM - 1),
'YYYY-MM') AS YEARMONTH
FROM ALL_OBJECTS
WHERE ROWNUM <= 12;

--oracle 前12個月
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, 1 - ROWNUM),
'YYYY-MM') AS YEARMONTH
FROM ALL_OBJECTS
WHERE ROWNUM <= 12;

--mysql 前12個月
SELECT DATE_FORMAT(
date_add(NOW(), interval 1-(@rownum :=@rownum + 1) MONTH),
'%Y-%m') AS YEARMONTH
FROM information_schema.tables t1,(SELECT @rownum := 0) t2
limit 12;

--mysql 未來12個月
SELECT DATE_FORMAT(
date_add(NOW(), interval (@rownum :=@rownum + 1) -1 MONTH),
'%Y-%m') AS YEARMONTH
FROM information_schema.tables t1,(SELECT @rownum := 0) t2
limit 12;

-- 在PostgreSQL中可以直接對時間進行加減運算:

SELECT now()::timestamp + '1 year';、

 --當前時間加1年

SELECT now()::timestamp + '1 year';  

'SELECT create_time + '1 year' from table;  

 

--當前時間加一個月
SELECT now()::timestamp + '1 month';  

SELECT create_time + '1month' from table;

 
--加1年1月1天1時1分1秒
select now()::timestamp + '1 year 1 month 1 day 1 hour 1 min 1 sec';  

selectcreate_time + '1 year 1 month 1 day 1 hour 1 min 1 sec';   

 --把col字段轉換成天 然后相加
SELECT now()::timestamp + (col || ' day')::interval FROM table     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM