我写了一个小程序来查找字符串中最后一个空格的位置。如果找到,则取出该空格之前的所有字符并继续执行此操作,直到结果的长度小于或等于20。 但似乎该计划没有按预期工作。
这是该计划。
declare
v_building_nam varchar2(100) :='lnkilap Mahallesi Üntel Sok. B1Blok';
begin
FOR i in 1..10
LOOP
EXIT when length(v_building_nam) <=20;
v_building_nam := substr(v_building_nam,1,instr(v_building_nam,' ',-1));
END LOOP;
dbms_output.put_line(v_building_nam);
END;
输出:
lnkilap Mahallesi Üntel Sok.
操作似乎是第一次正常工作,然后循环运行最多10次而没有值的变化。如果我做错了什么,有人可以告诉我吗?
答案 0 :(得分:3)
set serveroutput on;
declare
v_building_nam varchar2(100) :='lnkilap Mahallesi Üntel Sok. B1Blok';
begin
FOR I IN 1..10
LOOP EXIT WHEN LENGTH(V_BUILDING_NAM) <=20;
DBMS_OUTPUT.PUT_LINE(I);
v_building_nam := substr(v_building_nam,1,instr(v_building_nam,' ',-1)-1); --calculate previous position of space
DBMS_OUTPUT.PUT_LINE(V_BUILDING_NAM);
END LOOP;
dbms_output.put_line(v_building_nam);
END;
/
你占据空间是你的最后一个位置,你应该少花1个位置
答案 1 :(得分:1)
这不是: 找到字符串中的第一个空格。 如果位置> 20取前20个字符。如果位置&lt; 20将所有角色带到空间。
declare
l_position pls_integer;
l_string varchar2(100) := 'Thisissomestringwith spaces';
begin
l_position := least(instr(l_string,' ')-1,20);
dbms_output.put_line(substr(l_string,1,l_position));
end;