PostgreSQLOracle相容性之NUMTODSINTERVAL

德哥發表於2017-10-28

標籤

PostgreSQL , Oracle , NUMTODSINTERVAL , interval , number互轉


背景

NUMTODSINTERVAL 是Oracle數字轉時間間隔型別的函式。

例子:

SELECT NUMTODSINTERVAL(100, `day`) FROM dual;  
  
SELECT NUMTODSINTERVAL(100, `HOUR`) FROM dual;  
  
SELECT NUMTODSINTERVAL(100, `MINUTE`) FROM dual;  
  
SELECT NUMTODSINTERVAL(100, `SECOND`) FROM dual;  

PostgreSQL 是不需要轉換的,可以通過字串來輸入interval型別。

select interval `100 days`;  
  
select interval `100 hours` ;  
  
select interval `100 MINUTE`;  
  
select interval `100 SECOND`;  

但是很多Oracle的應用軟體習慣了Oracle那套介面,怎麼降低他們的遷移或開發轉換工作量呢?

最簡單有效的方法就是在PG裡面寫一個這樣的函式即可,如下:

create or replace function NUMTODSINTERVAL(float8, text) returns interval as $$  
  select ($1||` `||$2)::interval;  
$$ language sql strict immutable;  

例子

postgres=# select NUMTODSINTERVAL(1.1, `second`);  
 numtodsinterval   
-----------------  
 00:00:01.1  
(1 row)  


相關文章