2016-11-08 3 views
1

Я использую базу данных Oracle и нуждаюсь в том, чтобы обрезать некоторые ведущие нули, но мне нужно оставить достаточно больших нулей, чтобы заполнить длину поля не менее 4 символами. Это некоторые выборочные данные, где «MyField» является входной и «приготовленное» является то, что я хочу в качестве выхода:sql trim некоторые ведущие 0

myField  cooked 
0000000009  0009 
000
00ABCE1234 ABCE1234 

Я использовал это, чтобы достичь своей цели, но было интересно, если есть лучший способ

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 

ответ

4

Существует! Например, с помощью 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 

Это предполагает myfield длиной не менее четырех символов; если это не так, и вам нужно заполнить нулями, когда это не так, вы можете просто заменить myfield на '0000' || myfield в функции.

Смежные вопросы