JJUNNAK's
[ MySQL ] 문자열 슬라이싱(자르기) 본문
MySQL 문자열 슬라이싱
MySQL에서도 다른 프로그래밍 언어와 같이 문자열을 슬라이싱 할 수있는 네가지 기능이 있다.
1. Left
2. Right
3. Substring
4. Substring_Index
아래 학생 테이블에서 학번(STU_NUM) 을 슬라이싱 해볼것이다.
먼저 한가지 알아야 할것은 MySQL에서는 인덱스(index)가 다른 프로그래밍 언어와는 다르게
0이아닌 1부터 시작이다.
J J U N N A K
[1] [2] [3] [4] [5] [6] [7] <- good! ^o^
[0] [1] [2] [3] [4] [5] [6] <- no!! ㅠㅠ
1. Left
Left 는 문자열의 왼쪽부터 원하는 길이 만큼을 자른다.
select left(컬럼명, 원하는길이) from 테이블;
select left(STU_NUM, 3) from student; 를 수행하면 다음과 같이 3개의 숫자가 잘려져 나온다.
2. Right
Right 또한 Left 와 같은 로직으로 문자열의 오른쪽 부터 원하는 길이만큼을 자른다.
select right(컬럼명, 원하는길이) from 테이블;
select right(STD_NUM, 3) from student; 를 수행하면 다음과 같은 결과가 도출된다.
3. Substring
Substring은 내가 원하는 위치부터 + 원하는 길이까지 자를 수 있다.
select substring("문자열", 시작위치);
select substring("문자열",시작위치,길이);
시작위치만 설정한 경우 [ substring("문자열", 시작위치); ]
select substring("JJUNNAK",3);
결과 : UNNAK
길이까지 설정한 경우 [ substring("문자열",시작위치,길이); ]
select substring("JJUNNAK",1,3);
결과: JJU
실제 사용 예시
select substring((쿼리문), 시작위치, 길이);
-- student 테이블에서 짱구의 학번을 1부터 2까지 자름.
select substring((select STD_NUM from student where STD_NAME='짱구'),1,2);
결과 : 20
4. Substring_index
Substirng_index 는 내가 설정한 구분자를 기준으로 자를 수 있다.
select substring_index("문자열", "구분자", 구분자의순서);
예를 들어 JJ#UNN#AK 라는 문자열이 있다고 가정을 했을때
내가 사용할 구분자인 #은 총 2개가 포함되어 있다.
첫번째 # 까지는 JJ
두번쨰 # 까지는 JJ#UNN 이 존재하고 있다.
select substring_index("JJ#UNN#AK", "#", 1);
결과 : JJ
select substring_index("JJ#UNN#AK", "#", 2);
결과 : JJ#UNN
위와 같이 구분자가 여러개 존재하는경우
구분자의 순서(index)를 입력할 때 양수는 좌측부터, 음수일 경우에는 우측부터
구분자의 카운트가 시작된다.
select substring_index("JJ#UNN#AK", "#", -1);
결과 : AK
select substring_index("JJ#UNN#AK", "#", -2);
결과 : UNN#AK