본문 바로가기

tech

mysql에서 subring(변수,3) 과 같은 게 가능할까?

예를 들면.. 원본 데이터가

9,158,159,160,161,162,163,164,165,166,167,168,169

인데 맨 앞에 9, 를 제외하고 뒷부분(자식들만) 추출하려고 합니다.

결과는 다음과 같겠죠.

158,159,160,161,162,163,164,165,166,167,168,169

 

php같은 경우는 비교적 간단합니다.

substring(변수, 2) 이렇게 하면 되는데요.

문제는 원본데이터 부분이 가변적(dynamic)이라는 것!!!

 

어떻게 가변적인 것들 맨 앞에 코드만 빼고 뒷부분만 추출할 수 있을까요?

맨 앞부분이 한글자일수도 있고 두글자일 수도 있습니다.

 

좀 복잡해졌습니다.

SUBSTRING_INDEX만 가지고는 많이 좀 복잡해지고

SUBSTRING_INDEX + REPLACE를 같이 사용했습니다.

 

 

, GROUP_CONCAT(down_idxs) down_idxs

, GROUP_CONCAT(down_names) down_names , REPLACE(GROUP_CONCAT(down_idxs), CONCAT(SUBSTRING_INDEX(GROUP_CONCAT(down_idxs), ',', 1),','), '') down_idxs2

, REPLACE(GROUP_CONCAT(down_names), CONCAT(SUBSTRING_INDEX(GROUP_CONCAT(down_names), ',', 1),','), '') down_names2

 

이렇게 해서 잘 되는 줄 알았습니다.

그런데 하다 보니 에러가 났죠.

 

어떤?

9, 를 replace 하면 뒤에 159, 119, 같은 데 있는 9, 가 함께 다 대체됩니다.

 

그래서

.................

IGHT 함수를 사용해서 다시 수정했습니다.

 

, RIGHT( GROUP_CONCAT(down_idxs), LENGTH(GROUP_CONCAT(down_idxs)) - LENGTH(CONCAT(SUBSTRING_INDEX(GROUP_CONCAT(down_idxs), ',', 1),',')) ) down_idxs10

 

이게 결과가 제대로 나온 것 같아요.