天天看點

PostgreSQL date_trunc() 截斷日期函數,完成定時時間文法.

摘要:Oracle有大量的日期函數可供使用,trunc, new_time,months_between,next_day,last_day,add_months,round等函數.當然PostgreSQl 也有大量的時間函數,詳情請移步postgresql時間日期函數總結. 是以在此隻說明Postgresql 中的TRUNC取斷函數.

  1.首先介紹一下Oracle的trunc函數:

select trunc(sysdate) from dual    //傳回目前日期  sysdate: 系統時間
           
select trunc(sysdate,'year') from dual;   //傳回本年的第一天
           
select trunc(sysdate,'month') from dual;   //傳回本月的第一天
           
select trunc(sysdate,'q') from dual;       //傳回本季度的第一天
           
select to_char(trunc(sysdate),'yyyy-mm-dd hh24:mi:ss') from dual;  //擷取當天的零時零分零秒
           
select trunc(sysdate,'mi') from dual;         //擷取目前分
           

2. 接下來 介紹 Postgresql 的trunc函數.

  截斷數字類型函數trunc為數字截斷函數.移步postgresql: trunc函數.

  截斷日期類型函數date_trunc(text,time/timestamp/timestamptz);

3.date_trunc() 函數.

select date_trunc('month',now()) +interval '12 h';		
//每月1号 12點		
		
select date_trunc('month',now()) + interval '15 d 9 h 30 min';		
//每月15号9點半		
		
		
select date_trunc('day',now()) + interval '9 h';		
//每天9點		
		
		
		
select date_trunc('day',now()) + interval '7 d';		
//每周的今天		
select date_trunc('weak',now())  + interval '1d 1minute';		
//每周的周二第一分鐘		
		
select date_trunc('h',now()) + interval '30 minute';		
//每小時		
		
		
		
select date_trunc('minute',now()) + interval '30 second';		
//每分鐘		
select date_trunc('minute',now()) + interval '30 minute 30 second';		
//每30分鐘 		
		
		
select date_trunc('quarter',now()) + interval '15 d 15 h 15 minute 30 second';		
//本季度的第15天,15小時 15分 30秒		
select date_trunc('quarter',now() ) - interval '1 h';		
//每個季度最後一天的晚上11點		
select date_trunc('quarter',now() + interval '3 month') - interval '1 h';		
//每個季度的最後一天的晚上的11點(從下個季度開始算起).		
           

  補充:

me=# select date_trunc('day',date '2018-05-15 09:00:00+08') + interval '9 h';
        ?column?        
------------------------
 2018-05-15 09:00:00+08
(1 行記錄)

me=# select date_trunc('day',date '2018-05-15 14:09:04.127444+08') + interval '9 h';
        ?column?        
------------------------
 2018-05-15 09:00:00+08
(1 行記錄)

me=# select date_trunc('day',date '2018-05-14 14:09:04.127444+08') + interval '9 h';
        ?column?        
------------------------
 2018-05-14 09:00:00+08
(1 行記錄)

me=# select date_trunc('day',time '2018-05-14 14:09:04.127444+08') + interval '9 h';
 ?column? 
----------
 09:00:00
(1 行記錄)

me=# select date_trunc('day',timestamp '2018-05-14 14:09:04.127444+08') + interval '9 h';
      ?column?       
---------------------
 2018-05-14 09:00:00
(1 行記錄)

me=# select date_trunc('day',timestamptz '2018-05-14 14:09:04.127444+08') + interval '9 h';
        ?column?        
------------------------
 2018-05-14 09:00:00+08
(1 行記錄)

me=# select date_trunc('day',timestamptz '2018-05-14 14:09:04.127444+08'+ interval '9 h');
       date_trunc       
------------------------
 2018-05-14 00:00:00+08
(1 行記錄)
           

繼續閱讀