문자열 합치기? 0 7 797

by 날아라! [MySQL] [2019.01.04 14:40:29]


안녕하세요.

프로그래밍을 하다 궁금한 내용이 있어 문의좀 드릴까합니다.

 

현재 데이터베이스 컬럼내에 '1|2|3|4...'

위와같은 형식으로 데이터가 들어가있는 필드가 있습니다.

해당필드의 숫자를 합해서 출력시키고 싶은데.. 방법을 모르겠네요 ㅡㅡ

조언좀 부탁드립니다.

by 소주쵝오 [2019.01.04 14:51:11]
with t as
( select 1 i, '1|2|3|4' v from dual union all
  select 2, '3|4|5|6' v from dual
)
select i
     , to_number(dbms_xmlgen.getxmltype ('select ' || replace(v, '|', '+') || ' a from dual' ).extract('//text()')) val
from t;

 


by 날아라! [2019.01.04 14:59:06]

안녕하세요. 답변감사합니다 

말씀하신방식은 ORACLE인듯하네요 ,,,


by 날아라! [2019.01.04 15:00:38]

SELECT SUM(REPLACE(SUBSTRING_INDEX("1|2|3|4", "|", "12"), "|", ""));

위와같은 방식을 이용했는데. 뭔가 잘못된듯싶은데....도저히 모르겠네요..방법이 없을까요? ㅡㅡ


by 마농 [2019.01.04 15:05:31]
WITH data_t AS
(
SELECT 1 pk, '1|2|3|4' v
UNION ALL SELECT 2, '3|4|5|6'
)
, copy_t AS
(
SELECT 1 lv
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
UNION ALL SELECT 6
UNION ALL SELECT 7
UNION ALL SELECT 8
UNION ALL SELECT 9
)
SELECT pk
     , v
     , SUM(SUBSTRING_INDEX(SUBSTRING_INDEX(v, '|', lv), '|', -1)) x
  FROM data_t a
 INNER JOIN copy_t c
 WHERE lv <= LENGTH(v) - LENGTH(REPLACE(v, '|', '')) + 1
 GROUP BY pk, v
;

 


by 우리집아찌 [2019.01.04 15:07:42]

연산이 하고 싶은것인가요?

모든 로우의 구분자수은 일정한가요?     예) '1|2|3|4'    => 4개


by 우리집아찌 [2019.01.04 15:18:34]

질문조차.. 늦었네.


by 날아라! [2019.01.04 15:20:36]

^^ 아닙니다.

구분자수는 고정이 아닙니다.

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