2016-11-08 2 views
1

Ich benutze eine Oracle-Datenbank und muss einige führende Nullen trimmen, aber ich muss genug führende Nullen lassen, um die Feldlänge auf mindestens 4 Zeichen aufzufüllen. Dies ist einige Beispieldaten in dem ‚myField‘ ist der Eingang und ‚gekocht‘ ist das, was ich als das ausgegeben werden soll:sql trimmen einige führende 0

myField  cooked 
0000000009  0009 
000
00ABCE1234 ABCE1234 

ich verwendet, um dieses mein Ziel zu erreichen, aber frage mich, ob es einen besseren Weg ist

case 
    when length(trim(leading 0 from myfield)) >= 4 then trim(leading 0 from myfield) 
    else lpad(trim(leading 0 from myfield), 4 , 0) 
end as cooked 

Antwort

4

Es gibt! Zum Beispiel mit regexp_substr():

with 
    test_data (myfield) as (
     select '0000000009' from dual union all 
     select '000' from dual union all 
     select '00ABCE1234' from dual 
    ) 
-- end of test data; solution (SQL query) begins below this line 
select myfield, regexp_substr(myfield, '^0+(.{4,}$)', 1, 1, null, 1) as cooked 
from test_data 
; 

MYFIELD COOKED 
---------- ---------- 
0000000009 0009  
000
00ABCE1234 ABCE1234 

Dies setzt voraus, myfield mindestens vier Zeichen lang; Wenn dies nicht der Fall ist und Sie mit Nullen puffern müssen, wenn dies nicht der Fall ist, können Sie einfach myfield durch '0000' || myfield in der Funktion ersetzen.

Verwandte Themen