008.PGSQL-日期類型變換大全to_char、to_date、date_trunc、generate_series生成連續一段日期、interval間隔


 

0.日期 格式化 to_date

to_date(close_contact_time ,'yyyy-MM-dd hh24:mi:ss')  

 

select trunc('2020-08-10 10:43:32' ,'yyyy-MM-dd hh24:mi:ss' ) 1.當前時間 select CURRENT_TIMESTAMP
2020-08-10 10:41:22.943473+08
select CURRENT_TIME
10:41:36.494312+08
select CURRENT_DATE
2020-08-10
select now() 2020-08-10 11:49:24.7987+08 我們還可以控制now()的返回格式,如下 select now()::timestamp(0)without time zone;  (current_timestamp 是和now()一樣的) 2020-08-10 11:50:31

2.to_char()  時間類型 ---》》字符類型 
select to_char(CURRENT_TIMESTAMP,'yyyy-mm-dd hh24:mi:ss') 2020-08-10 10:43:32
select to_char(CURRENT_TIMESTAMP,'yyyymmdd') 20200810
select to_char(CURRENT_TIMESTAMP,'yyyymm') 202008


3.to_date    字符類型 ---》》日期類型
select to_date('2020-08-10 10:43:32' ,'yyyy-MM-dd hh24:mi:ss') 2020-08-10
select to_date('2020-08-10 10:43:32' ,'yyyy') 2020-01-01

3.字符串轉時間類型--強制類型轉換 :: cast
select '2020-08-09 00:00:00' :: TIMESTAMP ; 2020-08-09 00:00:00
select cast( '2020-08-09 00:00:00' as  TIMESTAMP ) 2020-08-09 00:00:00


4.date_trunc() 日期精確到本周、本月、本季度第一天 分鍾 select date_trunc('min',now()) 2020-08-10 11:52:00+08 小時 select date_trunc('hour',now()); 2020-08-10 11:00:00+08 年、月、日 select date_trunc('year',now()); 2020-01-01 00:00:00+08
select date_trunc('month',now()); 2020-08-01 00:00:00+08
select date_trunc('day',now()); 2020-08-10 00:00:00+08 本季度第一天 select date_trunc('quarter',now()) 2020-07-01 00:00:00+08 本周周一 select date_trunc('week','2020-08-09 00:00:00' :: TIMESTAMP); 2020-08-03 00:00:00

5.時間的計算方式,如下 select now() + interval '10 min/year/month/day/hour/sec/ (1 year 1 month 1 day 1 hour 1 min 1 sec)' 
 //本季度的第15天,15小時 15分 30秒 select date_trunc('quarter',now()) + interval '15 d 15 h 15 minute 30 second'; 2020-07-16 15:15:30+08
 //每個季度最后一天的晚上11點 select date_trunc('quarter',now() + interval '3 month') - interval '1 h'; 2020-09-30 23:00:00+08

 

 

 

1. 日期  往前推多少天

日期往前推6個月  跨年問題
occur_period =  to_char(to_timestamp(concat(left(p_occur_period,4),'-',right(p_occur_period,2)),'yyyy-MM') -interval'6 month' ,'yyyymm')

TRUNC(number,num_digits) Number 需要截尾取整的數字。 Num_digits 用於指定取整精度的數字。Num_digits 的默認值為 0。如果Num_digits為正數,則截取小數點后Num_digits位;如果為負數,則先保留整數部分,然后從個位開始向前數,並將遇到的數字都變為0。 TRUNC()函數在截取時不進行四舍五入,直接截取。 針對數字的案例,如: select trunc(123.458) from dual --123
select trunc(123.458,0) from dual --123
select trunc(123.458,1) from dual --123.4
select trunc(123.458,-1) from dual --120
select trunc(123.458,-4) from dual --0
select trunc(123.458,4) from dual --123.458
select trunc(123) from dual --123
select trunc(123,1) from dual --123
select trunc(123,-1) from dual --120
 針對日期的案例,如: select trunc(sysdate) from dual --2017/6/13 返回當天的日期
select trunc(sysdate,'yyyy') from dual   --2017/1/1 返回當年第一天.
select trunc(sysdate,'mm') from dual  --2017/6/1 返回當月第一天.
select trunc(sysdate,'d') from dual  --2017/6/11 返回當前星期的第一天(以周日為第一天).
select trunc(sysdate,'dd') from dual  --2017/6/13 返回當前年月日
select trunc(sysdate,'hh') from dual  --2017/6/13 13:00:00 返回當前小時
select trunc(sysdate,'mi') from dual  --2017/6/13 13:06:00 返回當前分鍾

 

2.日期格式化

select to_char(CURRENT_TIMESTAMP,'yyyy-mm-dd hh24:mi:ss')

select to_char(CURRENT_TIMESTAMP,'yyyy-mm-dd hh24:mi:ss')

 

select to_char(cast('2020-02-01 15:37:05' as timestamp), 'yyyymmdd')
先把字符串類型轉化為時間戳類型
to_char(cast(create_time as timestamp), 'yyyymmdd') =to_char(current_timestamp, 'yyyymmdd')

 

 

3.生成一段連續時間段內所有的數據期

generate_series,產生連續數字、步長值

select TO_CHAR(generate_series,'yyyymmdd') as occur_period
from generate_series('20200201'::TIMESTAMP, to_char(CURRENT_TIMESTAMP,'yyyymmdd') ::TIMESTAMP, '1 day')


select to_char(generate_series(to_date('20130403','yyyymmdd'), to_date('20130404','yyyymmdd'), '1 hours'), 'hh24');

 

4.查詢本周周一的日期

select to_char(date_trunc('week',to_date(to_char(current_date, 'YYYYww')+1, 'YYYYww')),'YYYYMMDD') as monday_date,current_date;

 


免責聲明!

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



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