TO_CHAR(TO_NUMBER(bon)) 은 숫자로 구성된 문자열에서 앞에 0 을 제거하기 위한 방법중 하나입니다.
'00005' ==> '5'
그런데 문제는 bon 에 숫자가 아닌 다른 문자가 포함된다면 에러가 나게 되구요.
에러를 피하기 위해 숫자만으로 구성되었는지를 판단하는 것이죠.
TRIM(TRANSLATE(bon, '0123456789', ' ')) IS NULL
이 구문은 간단하게 TRANSLATE(bon, 'a0123456789', 'a') IS NULL 하시면 됩니다.
숫자만으로 구성되어 있으면 앞에 0 제거, 아니면 아예 널을 반환.
그런데 마지막 검색조건이 LIKE 라구요?
LIKE 라면 굳이 숫자로 바꾸는 짓을 할 필요가 있을까요?
앞에 0 제거는 LTRIM 을 이용하시면 됩니다.
LTRIM(bon, '0')
이러면 숫자인지 판단할 필요가 없죠.