하나의 컬럼을 공백으로 Tokenizing 할 때 보통 어떻게들 많이 하세요? 0 2 1,663

by 훈훈후니 [SQL Query] Token [2016.08.28 15:28:55]


안녕하세요.

 

다음과 비슷한 형태로 만들어진 Table 이 있는데.. 이걸 공백을 기준으로 한단어씩 Tokenizing 해야 합니다.

문제는 한 컬럼에 거의 100개 이상의 단어가 들어가있는데..

이걸 단순히 아래 쿼리처럼 자르니까 속도가 어마어마하게 느리더라구요..

(Row 수는 2만개쯤 되고 잘려진 단어가 특정 단어인지 비교해야 하는 구문이 필요합니다.)

 

혹시 좋은 방법이 없을까요???

 

1
2
3
4
5
6
7
8
9
10
WITH t AS
(
    SELECT ' 1A 2AB 3ABC 4A 5ABCDE 6A 7AB' AS a FROM dual
)
SELECT
REGEXP_SUBSTR(A, '[^[:space:]]+', 1, 1),
REGEXP_SUBSTR(A, '[^[:space:]]+', 1, 2),
REGEXP_SUBSTR(A, '[^[:space:]]+', 1, 3),
REGEXP_SUBSTR(A, '[^[:space:]]+', 1, 4)
FROM t

감사합니다~~
 

by 마농 [2016.08.29 10:30:39]

최종 목적지가 특정 단어 검색이라면?
굳이 자를 필요 없이 그냥 LIKE 나 INSTR 검색하면 될 듯 하네요.


by 훈훈후니 [2016.08.29 15:15:09]

마농님 답변 감사드립니다.

10개를 자른다고 가정했을 때

첫번째 단어가 무슨 단어인지 알아야 하고

두번쨰 단어가 무슨 단어인지 확인해야 하고

 

이런 식의 로직이 필요합니다.

(각 단어가 나타내는 바가 다르고, 그 결과값을 보는 것이라서요.)

 

예를 들어 해당 컬럼이 사과를 나타내는 거라고 하면

첫번째 단어는 사과의 크기

두번쨰 단어는 사과의 색깔

이런 식으로 들어가 있어서

해당 사과의 크기가 몇이고 색깔이 무엇이고.. 그런 걸 Filtering 하여

그걸 보여줘야 되는 형식이라서요.

 

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