MYSQL | Mysql 에서 php explode() 함수와 같은 효과
작성자
가끔 데이터를 넣을때, 가져올때의 상황이 서로 맞지 않아 낭패를 보는 경우가 있다.
 
한테이블에 두종류의 이상의 코드를 각각 다른 컬럼에 넣지 않고,
reference_code 라는 컬럼에 "13,9,30" 이런식으로 콤마로 구분해서 한꺼번에 집어넣은적이 있다.
 
물론 저렇게 입력된 데이터는 불러올때도 한꺼번에 불러와서 php 의 explode() 함수로 나누어 배열에 저장할 수 있지만,
 
어쩌다보니 쿼리로 처음 불러올때부터 그 레코드의 reference_code 값이 "13,9,30" 라면 그중 콤마로 나누어 맨 앞의 인자가 "13" 인 레코드만 불러와야 하는 상황에 처했다.
 
이런 난감한 경우를 어떻게 넘겨야 하는가....
 
Mysql 에서 query 만으로는 php 의 explode() 함수와 같은 효과를 낼수 있는 방법은 없지만,
거의 같은 효과를 볼수있는 꽁수가 있다.
Mysql 내장함수인 SubString_Index() 를 사용하는 방법이다.
php의 explode() 와 성격은 다른 함수이지만 사용하기에 따라서 비슷한 효과를 볼수 있다.
 
SELECT SubString_Index(reference_code , ',' , 1) as code_a, SubString_Index(SubString_Index(reference_code, ',' , -2), ',' , 1) as code_b, SubString_Index(reference_code , ',' , -1) as code_b  From 테이블이름 WHERE SubString_Index(reference_code , ',' , 1) = '13'; 

이렇게 쿼리를 날리면
 
code_a      | code_b      | code_c
----------------------------------------------
 13            |  9               |  30
 
이렇게 결과값을 얻어낼 수 있다 +_+
 
한가지 아쉬운점은 컬럼안의 데이터가  "13,9,30," 처럼 맨뒤에 콤마가 붙으면 안먹힌다는 것이다 ㅠㅠ

 

댓글목록

등록된 댓글이 없습니다.

총 게시물 93 개, 페이지 4 RSS
제목 작성자
MYSQL 년월일시간분(예:201406241621)으로 저장되어 있는 데이타를 년-월-일 시간:분:초로 H
MYSQL Column '컬럼명' in order clause is ambiguous H
MYSQL mysql update할때 select함께 하기 H
MYSQL 한글이 아닌값 검색 H
MYSQL 문자열을 치환 REPLACE() H
MYSQL 숫자의 천단위 구분자 삽입 FORMAT() H
MYSQL 문자열을 특정 구분자를 포함 합치기 CONCAT_WS() H
MYSQL 문자열을 합치기 CONCAT() H
MYSQL 문자열의 길이와 Byte CHAR_LENGTH(), LENGTH() H
MYSQL 문자열로 된 숫자를 정렬하기 H
MYSQL MySQL error 1242 : subquery returns more than 1 row H
MYSQL SQL / MySQL 서브쿼리(SubQuery) H
MYSQL 특수 비교 연산자와 검색 결과의 정렬 : like, between, in H
MYSQL Mysql 에서 php explode() 함수와 같은 효과 H
MYSQL ORDER by 정렬(임의적인 순번) H
게시물 검색