Die reguläre Ausdruck Lösung von der Frage Tom Sie verlinkten Beitrag zu arbeitet mit triviale Änderung:
select trim(regexp_replace(to_char(12345678944), '(....)', '\1 ')) as result
from dual;
RESULT
-------------------------
1234 5678 944
die trim()
ist es, weil ein Wert, der ein exaktes Vielfaches von 4 Ziffern ist, würde einen hinteren Raum, der durch die r gegeben werden egex; andere Werte nicht. Die einzige andere Änderung besteht darin, das Muster aus vier statt drei Zeichen zu machen, wobei in den Klammern eine zusätzliche Periode steht.
, die mit ganzen Zahlen jeder Größe arbeitet, wie durch eine Stichprobe gezeigt:
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
Ich habe gerade das Ergebnis Länge gezeigt, so dass Sie keine Leerzeichen gibt es zu sehen.
Was meinst du mit "funktioniert nicht"? Haben Sie einen Fehler oder ein unerwartetes Ergebnis? – Aleksej
Ihr Block funktioniert, wenn Sie einfach das Semikolon nach dem Deklarieren entfernen; außer Sie Schleife zu oft und drucken Sie die Ausgabe an der falschen Stelle. –
Es lässt Leerzeichen am Ende der Zeichenfolge. Dies liegt an der Schleife. Die Schleife geht in die Länge (v_nr), das ist mehr, als es gehen muss. – ReneJanssen