본문 바로가기
개발/Database

MYSQL에서 Split하기 : SUBSTRING_INDEX

by 안뇽! 2022. 4. 3.
반응형

상황은 이러했다.

 

회사의 DB를 보여줄 수 없으니 비슷하게 꾸미면

 

아래 표를 변경하여

이름 과일 선택한 순서 과일 선택한 시간(오후)
철수 사과, 딸기, 바나나, 키위 3시,4시,5시,6시 
짱구 키위, 딸기, 바나나, 수박  1시,2시,9시,10시 
훈이 바나나, 멜론, 포도, 블루베리  2시,3시,8시,11시 

 

다음과 같이 '마지막 선택한 과일', '마지막 선택한 시간' 만 보여달라는 요청사항이었다.

이름 마지막 선택한 과일 마지막 선택한 시간
철수 키위 6시
짱구 수박 10시
훈이 블루베리 11시

 

 

 

해당 sql은 아래와 같이 작성되어 있었다.

SELECT 
	name AS "이름", 
    GROUP_CONCAT(pick-fruit ORDER BY id(시간) SEPARATOR ',') 
    AS "과일 선택한 순서"
    GROUP_CONCAT( DATE_FORMAT(DATE_ADD(과일.updatedAt, INTERVAL 9 HOUR), '%Y-%m-%d %H:%i') ORDER BY id(시간) SEPARATOR ',') 
    AS "과일 선택 시간"
FROM ~~

GROUP BY 과일이름,과일id

 

적절한 검색어를 입력하지 못해 한참동안 구글링을 하다가

mysql split 이라는 검색어를 통해 SUBSTRING_INDEX를 알게 되었다.

 

그리고 SUBSTRING_INDEX을 GROUP_CONCAT에도 사용할 수 있어 다음과 같이 작성했다.

 

SELECT 
	name AS "이름", 
    SUBSTRING_INDEX(GROUP_CONCAT(pick-fruit ORDER BY id(시간) SEPARATOR ','),',',-1) 
    AS "마지막 선택한 과일"
    SUBSTRING_INDEX(GROUP_CONCAT( DATE_FORMAT(DATE_ADD(과일.updatedAt, INTERVAL 9 HOUR), '%Y-%m-%d %H:%i') ORDER BY id(시간) SEPARATOR ','),',',-1) 
    AS "마지막 선택한 시간"
FROM ~~

GROUP BY 과일이름,과일id

 

SUBSTRING(문자열, 시작 위치, 시작 위치부터 가져올 문자수)

 

SUBSTRING_INDEX 를 이용하면 '사과, 딸기, 바나나, 키위' 에서 '키위' 만 뽑아올 수 있다.

이름 마지막 선택한 과일 마지막 선택한 시간
철수 키위 6시
짱구 수박 10시
훈이 블루베리 11시
반응형

'개발 > Database' 카테고리의 다른 글

Mysql 비번 초기화  (0) 2023.07.14
외부조인  (0) 2022.03.09
DISTINCT 중복된 결과중 1개만 출력  (0) 2022.03.08
내부조인 외부조인  (0) 2022.03.08
MySQL 변수사용  (0) 2022.02.25