标签
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)