LightDB oracle模式增强ceil函数

背景

LightDB致力于兼容 oracle语法,目标是 oracle 用户不用修改 sql 代码无缝切换到LightDB数据库。oracle中的ceil函数支持对两个日期之差做向上取整,例如如下sql:

SQL> select ceil(date'2023-11-30' - date'2023-10-31') from dual;

CEIL(DATE'2023-11-30'-DATE'2023-10-31')
---------------------------------------
                                     30

而原生pg并不能支持,因为在原生pg中,一个date减去另一个date的返回值,其类型是interval。因此在23.4版本中,LightDB对ceil函数做了增强,支持传入interval类型的参数,将interval类型中的天数先获取出来,这是个数值,再对其执行向上取整操作。

使用案例

--原有的对数值向上取整功能并不影响
lightdb@oracle=# select ceil(1.3);
 ceil 
------
    2
(1 row)

lightdb@oracle=# select ceil(1.3*5);
 ceil 
------
    7
(1 row)

lightdb@oracle=# select ceil(i) from generate_series(1,5) i;
 ceil 
------
    1
    2
    3
    4
    5
(5 rows)


--当传入两个日期之差时
lightdb@oracle=# select ceil(sysdate - '2023-01-01'::date) FROM dual ;
 ceil 
------
  335
(1 row)

lightdb@oracle=# select ceil(sysdate - to_date('2023-11-27','yyyy-mm-dd')) FROM dual;
 ceil 
------
    5
(1 row)

lightdb@oracle=# select ceil(sysdate - to_date('2023-01-01','yyyy-mm-dd')) FROM dual;
 ceil 
------
  335
(1 row)


--在存储过程中简单使用
lightdb@oracle=# SELECT dbms_output.serveroutput(true);
 serveroutput 
--------------
 
(1 row)

lightdb@oracle=# CREATE OR REPLACE PROCEDURE testproc() 
lightdb@oracle-# IS 
lightdb@oracle$#     a  date;
lightdb@oracle$#     v  number;
lightdb@oracle$# BEGIN 
lightdb@oracle$#     a := to_date('2023-11-30', 'yyyy-mm-dd');
lightdb@oracle$#     select ceil(sysdate - a) into v from dual; 
lightdb@oracle$#     dbms_output.put_line('v=' ||  v );
lightdb@oracle$# END;
lightdb@oracle$# /
CREATE PROCEDURE
lightdb@oracle=# call testproc;
v=2
CALL


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值