쿼리 문의드려요 1

by sm5 [SQL Query] [2025.04.10 13:15:38]


안녕하세요.

테이블에 데이타가 아래같습니다.

형식은 varchar 텍스트입니다

용돈:5245  -> 용돈:25400

 

여기에서 5245하고 25400 하고 합산하고 싶은데요

그래서 저 숫자만 발라서 sum할수있는 방법이 있을까요?

참고로 발생할수있는 숫자최대자리수는 7자리 입니다

대충..

용돈: 이후 첫째자리수터 7자리까지 숫자인지 매자리를 체크해서 숫자가 아닌게 나오는 자리바로 이전 자리까지 가져와야할듯한데 생각이 안나서요

by 우주민 [2025.04.10 13:39:19]
-- 단순하게 숫자만 추출해서 SUM , ORACLE
SUM(TO_NUMBER(REGEXP_REPLACE(컬럼명, '[^0-9]', '')))
-- 구분자 이전 텍스트에 숫자가 있을 가능성이 있다면 구분자 이후만 추출해서 SUM, MYSQL
SUM(CAST(SUBSTR(컬럼명,INSTR(컬럼명,':')+1) as UNSIGNED))

 


by 마농 [2025.04.11 08:39:29]

보여주신 예시자료가 하나의 항목안에 텍스트로 용돈이 두번 들어가는 형태인가요?
이 형태는 항상 동일한지? 아니면 한번 또는 여러번 도 가능한 건지?
숫자 연속인데? 금액에 컴마가 들어 있다던가 변형이 있을 수도 있는지? (예: 25,400)
용돈 외에 다른 숫자는 없는지? 등등


by 우주민 [2025.04.11 14:45:16]

와... 읽다보니 저 두개의 용돈 정보가 한 텍스트처럼 보이네요.

일단 용돈 2개의 정보만 있다고 생각하고 새로 쿼리 구성했습니다.

select cmt
     , cast(regexp_replace(split_part(cmt,'용돈:',2),'[^0-9]','') as integer) +
       cast(regexp_replace(split_part(cmt,'용돈:',3),'[^0-9]','') as integer) as sum_cmt
  from (select '용돈:5245 -> 용돈:25400' as cmt) t

테스트는 피치 못하게 redshift 로 진행하였습니다.(현재 테스트가 가능한 유일한 db라서....)

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