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

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


안녕하세요.

 

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

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

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

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

 

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

 

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() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입