한 문장안에서 특정문자가 마지막으로 들어가있는 위치를 확인하는 방법이 있을까요? 0 5 2,539

by 바람이불면 [SQL Query] 문장안에서글자찾기 특정문자 위치확인 [2014.10.28 14:35:43]


안녕하세요 늘 도움을 잘받아가는 바람이 불면입니다.

아래와 같은 자료가 있습니다.

1294241787-K10

157149-1571-K100

1275547-22467

맨 마지막 하이픈 뒤에 붙어 있는 숫자가 시리얼 번호인데,

문제는 하이픈이 1개 일수도 있고 3개로 늘어날 수도 있는 상황입니다.

이런 경우 어떻게 쿼리를 만들면 좋을까요?

 

by 오라클초보 [2014.10.28 14:44:18]

Select instr('123-098-1','-', -1) From dual;

 SELECT REGEXP_INSTR('2-123-098-', '[^-]*$') -1 AS rx_instr  FROM dual;


by DarkBee [2014.10.28 14:45:34]
SELECT REGEXP_SUBSTR ( '157149-1571-K100', '[^-]+$', 1, 1 )  FROM DUAL

 


by 바람이불면 [2014.10.28 15:20:08]

아.. 제가 DB 버전을 안썼었네요.

9.2.0이어서... 정규식 사용이 불가능했습니다.

with setable as(
select '1294241787-K10' as partnumber from dual union all
select '157149-1571-K100' from dual union all
select '1275547-22467' from dual 
)
select se.*,
       to_number(decode(instr(se.partofserial, 'K', 1, 1), 0, se.partofserial
                                                           , substr(se.partofserial, instr(se.partofserial, 'K', 1, 1) + 1, length(se.partofserial)))) as serial
from   (select partnumber
              ,substr(sv.partnumber, (length(sv.partnumber) - instr(sv.partnumber, '-', -1, 1)) * -1) as partofserial
        from   setable sv ) se

 

위와 같이 정리했네요. 도움 감사합니다.
 


by DarkBee [2014.10.28 15:35:57]
with setable as(
    select '1294241787-K10' as partnumber from dual union all
    select '157149-1571-K100' from dual union all
    select '1275547-22467' from dual 
)
SELECT SUBSTR ( partnumber, INSTR ( partnumber, '-', -1 ) + 1 ) 
     , TRANSLATE ( SUBSTR ( partnumber, INSTR ( partnumber, '-', -1 ) + 1 ), ' ABCDEFGHIJKLMNOPQRSTUVWXYZ', ' ' )
  FROM setable

 


by 바람이불면 [2014.10.29 13:11:29]

이런 방법도 있군요 감사합니다!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입