Oracle 在字符串中插入空格x个字符

Oracle 在字符串中插入空格x个字符,oracle,plsql,Oracle,Plsql,我希望v_numberwhithspace有以下输出: 12345678944 现在它在字符串的末尾留下空白。 我已经提出了一个建议。广告的代码,以使它更清楚我的意思。 在开始和结束时删去空格。 我已经试过了,但对我不起作用。如果我理解你的需求,你必须更好地处理循环条件,循环不是针对起始数字的所有长度,而是将其分为4个字符;此外,如果结果只需要一个字符串,则PUT_行将退出循环: declare v_nr number DEFAULT 12345678944; v_number

我希望v_numberwhithspace有以下输出:

12345678944

现在它在字符串的末尾留下空白。 我已经提出了一个建议。广告的代码,以使它更清楚我的意思。 在开始和结束时删去空格。
我已经试过了,但对我不起作用。

如果我理解你的需求,你必须更好地处理循环条件,循环不是针对起始数字的所有长度,而是将其分为4个字符;此外,如果结果只需要一个字符串,则PUT_行将退出循环:

declare 
  v_nr number DEFAULT 12345678944;    
  v_numberWithSpace varchar2(255);    
  v_count number DEFAULT 1;    
begin    
  for i in 1..length(v_nr)  loop    
    v_numberWithSpace := v_numberWithSpace ||substr(v_nr, v_count, 4)|| ' .';    
    v_count := v_count + 4;
    DBMS_OUTPUT.PUT_LINE( v_numberWithSpace);    
  end loop;      
  v_numberWithSpace := substr(v_numberWithSpace,1 , length(v_numberWithSpace) -1);    
end;

您链接到的Ask Tom帖子中的正则表达式解决方案只需稍加修改:

1234 5678 944
修剪是因为一个精确的4位数倍数的值将由正则表达式提供一个尾随空格;其他值不适用。唯一的另一个变化是将模式设置为四个字符而不是三个字符,并在括号内加上一个句号

适用于任意大小的整数,如随机样本所示:

select trim(regexp_replace(to_char(12345678944), '(....)', '\1 ')) as result
from dual;

RESULT                  
-------------------------
1234 5678 944            

我刚刚显示了结果长度,这样您就可以看到没有尾随空格。

什么是不起作用的?您是否有错误或意外的结果?如果您在declare之后删除分号,那么您的块可以正常工作;但是循环次数太多,打印输出的位置不正确。它会在字符串末尾留下空白。这是因为循环。循环的长度超过了它需要的长度。谢谢Aleksej!那是为了我。
select trim(regexp_replace(to_char(12345678944), '(....)', '\1 ')) as result
from dual;

RESULT                  
-------------------------
1234 5678 944            
with t (n) as (
  select trunc(dbms_random.value(power(10, level -1), power(10, level)))
  from dual
  connect by level <= 20
)
select n,
  trim(regexp_replace(to_char(n), '(....)', '\1 ')) as result,
  length(trim(regexp_replace(to_char(n), '(....)', '\1 '))) as result_length
from t;

                    N RESULT                    RESULT_LENGTH
--------------------- ------------------------- -------------
                    9 9                                     1
                   45 45                                    2
                  483 483                                   3
                 3178 3178                                  4
                73389 7338 9                                6
               192365 1923 65                               7
              3662474 3662 474                              8
             97356484 9735 6484                             9
            446571637 4465 7163 7                          11
           9557657854 9557 6578 54                         12
          25608546675 2560 8546 675                        13
         511047589116 5110 4758 9116                       14
        7429787110250 7429 7871 1025 0                     16
       13021942429553 1302 1942 4295 53                    17
      563394031257243 5633 9403 1257 243                   18
     6504958239800949 6504 9582 3980 0949                  19
    84778674020192456 8477 8674 0201 9245 6                21
   178163119511742275 1781 6311 9511 7422 75               22
  8473846546814521167 8473 8465 4681 4521 167              23
 95084346610621497023 9508 4346 6106 2149 7023             24