lightdb substr函数支持浮点类型

文章介绍了在信创项目中,从ORACLE迁移的程序如何利用LightDB23.4版本中substr函数的新特性,特别是处理位置参数和长度参数为浮点数的情况。函数在处理小数部分时将其截断作为整数,且0和1的位置参数效果相同。
摘要由CSDN通过智能技术生成

文章目录

背景

在信创适配中,从ORACLE迁移过来的程序使用了substr函数。

LightDB 23.4版本对该函数进行了增强。支持位置参数和长度参数使用number类型。

示例

使用substr(text, numeric, numeric)函数
使用substr(text, numeric)函数

declare
	line varchar2(300) := '312456789009876543001000.00';
	acct varchar2(100);
	amt  varchar2(100);
	
	pos number(10);
	len number(10);
begin
	pos = 1;
	len = 20;
	acct := substr(line, pos, len);
	pos = 21;
	amt := substr(line, pos);
	dbms_output.put_line('acct:' || acct);
	dbms_output.put_line('amt:' || amt);
end;
/

acct:31245678900987654300
amt:1000.00
DO

create table tt_substr(pos number(10, 2), len number(10, 2));
insert into tt_substr values(0.0, 0.0);
insert into tt_substr values(-0.0, -0.0);
insert into tt_substr values(0.0, 2);
insert into tt_substr values(0.11, 2);
insert into tt_substr values(0.51, 2);
insert into tt_substr values(1.0, 2);
insert into tt_substr values(1.11, 2);
insert into tt_substr values(1.51, 2);
insert into tt_substr values(-1.0, 2);
insert into tt_substr values(-1.11, 2);
insert into tt_substr values(-1.51, 2);
insert into tt_substr values(null, null);
insert into tt_substr values(1.0, null);
insert into tt_substr values(null, 1.0);
insert into tt_substr values(1.0, 1.0);
insert into tt_substr values(1.0, 1.11);
insert into tt_substr values(1.0, 1.51);
insert into tt_substr values(1.0, -1.0);
insert into tt_substr values(1.0, -1.11);
insert into tt_substr values(1.0, -1.51);
insert into tt_substr values(1.0, 1);
insert into tt_substr values(2.0, 1);
insert into tt_substr values(3.0, 1);
insert into tt_substr values(4.0, 1);

lightdb@test_oracle=# select pos, len, substr('abcdef', pos, len) v1 , substr('abcdef', pos) v2 from tt_substr order by pos ASC, len asc;
  pos  |  len  | v1 |   v2   
-------+-------+----+--------
 -1.51 |  2.00 | f  | f
 -1.11 |  2.00 | f  | f
 -1.00 |  2.00 | f  | f
  0.00 |  0.00 |    | abcdef
  0.00 |  0.00 |    | abcdef
  0.00 |  2.00 | ab | abcdef
  0.11 |  2.00 | ab | abcdef
  0.51 |  2.00 | ab | abcdef
  1.00 | -1.51 |    | abcdef
  1.00 | -1.11 |    | abcdef
  1.00 | -1.00 |    | abcdef
  1.00 |  1.00 | a  | abcdef
  1.00 |  1.00 | a  | abcdef
  1.00 |  1.11 | a  | abcdef
  1.00 |  1.51 | a  | abcdef
  1.00 |  2.00 | ab | abcdef
  1.00 |       |    | abcdef
  1.11 |  2.00 | ab | abcdef
  1.51 |  2.00 | ab | abcdef
  2.00 |  1.00 | b  | bcdef
  3.00 |  1.00 | c  | cdef
  4.00 |  1.00 | d  | def
       |  1.00 |    | 
       |       |    | 
(24 rows)

如上所示,当位置信息和长度信息为浮点数时,小数部分是直接截掉后当做一个整数使用。同时当位置信息是0或者1时效果是等价的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值