作者
digoal
日期
2017-09-26
标签
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)
```
PostgreSQL 许愿链接
您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.
9.9元购买3个月阿里云RDS PostgreSQL实例
PostgreSQL 解决方案集合
德哥 / digoal's github - 公益是一辈子的事.





