'Oracle'에 해당되는 글 1건

  1. 2015.10.01 쿼리 자리수 앞에 0 붙여 주기.
2015. 10. 1. 21:54

쿠폰 번호를 디비에서 시퀀스를 써서 번호를 매겨야 하는데, 처음에 안 만들어서, 

디비에서 최고 높은 값을 찾아서, +1를 해주고, 다시 앞에 'U' 붙이고, 0000 붙여서 자릿수를 맞춰 주고 싶을때 쓰는거다.

밑에 예시처럼.

U0000001

U0000039

U0000040



select 'U'||substr('000000000'||to_char(max(to_number(replace(nvl(coupon_cd,'0'),'U',''))) + 1),-9,9) max_coupon

from tk_coupon



처음에

select replace(coupon_cd, 'U', '') from tk_coupon;   //앞에 'U'를 제거해줌.


select to_number(replace(coupon_cd, 'U', '')) from tk_coupon;  //스트링을 넘버로 바꿔줌.


select to_number(replace(nvl(coupon_cd, '0'), 'U', '')) from tk_coupon;  //nvl 혹시 모르니, nvl를 써서, null값을 0으로 바꿔줌.


select max(to_number(replace(nvl(coupon_cd, '0'), 'U', ''))) from tk_coupon;   //그 다음에, 그중에서 max로 최대값을 찾아줌.


select max(to_number(replace(nvl(coupon_cd, '0'), 'U', '')))+1 from tk_coupon;   //거기에 1를 더해줌.


select to_char(max(to_number(replace(nvl(coupon_cd, '0'), 'U', '')))+1) from tk_coupon;  //다시 number에서, char로 바꿔줌.


select '000000000'||to_char(max(to_number(replace(nvl(coupon_cd, '0'), 'U', '')))+1) from tk_coupon;  //앞에 0000000를 자리수 맞게 붙여줌.  0000000004 이렇게 됨. 그래서 앞에 한자리를 지워줘야함.


//혹시 모르니, 11이 됬을때는, 0를 하나 더 지워주어야 함. 그래서 substr( [값], [시작자리수], [자리수갯수] )를 써서, 앞에를 잘라줌. 시작 자릿수에 (-)를 붙였을때는 뒤에서 부터 시작임.

select substr('000000000'||to_char(max(to_number(replace(nvl(coupon_cd, '0'), 'U', '')))+1), -9.9) from tk_coupon;

위에서부터, 9자릿수까지함.

 

//그 다음에 앞에 U를 붙여주면됨.

select 'U'||substr('000000000'||to_char(max(to_number(replace(nvl(coupon_cd, '0'), 'U', '')))+1), -9.9) from tk_coupon;


 값 :  U000000005


//칼럼 이름이 너무 길므로, 뒤에 max를 붙여서 이름을 바꿔준다.

select 'U'||substr('000000000'||to_char(max(to_number(replace(nvl(coupon_cd, '0'), 'U', '')))+1), -9.9) max from tk_coupon;



아니면, 쉽게 to_char 만 쓰는 법도 있다.


select 'U'||trim(to_char(to_number('1234556') + 1,'000000000')) max_coupon

from dual;


to_char로 자릿수 잡아주는거다.하지만, trim를 써서, 빈칸을 없애줘야한다.



Posted by Tyson