MySQL - SUBSTRING

임재현·2021년 4월 30일
0

MySQL

목록 보기
15/52
post-custom-banner

UDEMY - The Ultimate MySQL Bootca…The Ultimate MySQL Bootcamp: Go from SQL Beginner to Expert를 수강하며 정리한 글

SUBSTRING

공식문서
가장 좋은 방법은 역시 공식 문서를 보는 것이다.

CONCAT과 같은 String Function중의 하나인 SUBSTRING이다. 사실 서브스트링은 매우 유명하다. SQL 뿐만이 아니라 다른 여러 언어들에서도 나오므로.

mysql> SELECT SUBSTRING('Hello World', 1,5);
+-------------------------------+
| SUBSTRING('Hello World', 1,5) |
+-------------------------------+
| Hello                         |
+-------------------------------+
1 row in set (0.00 sec)

❗️하지만 주의할 점이 있다. 보통 다른 프로그래밍 언어 (Java, JavaScript등...)에서 쓰일 때 substring은 'Hello World.substring(0,5)'이런 식으로 하면 Hello가 출력된다. 0번째 인덱스부터 시작하여 5번 인덱스 전(5번 인덱스는 포함하지 않는다)까지 잘라서 보여주는 것이다. 하지만 SQL에서 SUBSTRING은 쓰는 방법이 다르다. SUBSTRING안에 첫번째 매개변수로 문자열을 넣어주고, 인덱스가 0부터가 아닌 1부터 시작하며, 두번째 매개변수로 쓰인 인덱스부터 시작, 3번째 매개변수는 글자수를 나타낸다.(몇글자 자를지) JavaScript의 substr함수와 비슷한 것 같다.(substring함수 말고 substr)mdn- substr

  • 이런 방식도 있다.
mysql> SELECT SUBSTRING('Hello World' , 7);
+------------------------------+
| SUBSTRING('Hello World' , 7) |
+------------------------------+
| World                        |
+------------------------------+
1 row in set (0.00 sec)

세번째 매개변수를 안넣고, 2번째 매개변수 까지만 넣었다. 그러자 7번째 인덱스부터(인덱스는 1부터 시작) 마지막 글자까지를 출력하였다.

  • 마이너스를 넣으면 어떻게 될까?
mysql> SELECT SUBSTRING('Hello World', -3);
+------------------------------+
| SUBSTRING('Hello World', -3) |
+------------------------------+
| rld                          |
+------------------------------+
1 row in set (0.01 sec)

이제 실제 데이터에 적용시켜보자.

mysql> select title from books;
+-----------------------------------------------------+
| title                                               |
+-----------------------------------------------------+
| The Namesake                                        |
| Norse Mythology                                     |
| American Gods                                       |
| Interpreter of Maladies                             |
| A Hologram for the King: A Novel                    |
| The Circle                                          |
| The Amazing Adventures of Kavalier & Clay           |
| Just Kids                                           |
| A Heartbreaking Work of Staggering Genius           |
| Coraline                                            |
| What We Talk About When We Talk About Love: Stories |
| Where I'm Calling From: Selected Stories            |
| White Noise                                         |
| Cannery Row                                         |
| Oblivion: Stories                                   |
| Consider the Lobster                                |
+-----------------------------------------------------+
16 rows in set (0.00 sec)

------
mysql> SELECT SUBSTRING(title, 1, 10) FROM books;
+-------------------------+
| SUBSTRING(title, 1, 10) |
+-------------------------+
| The Namesa              |
| Norse Myth              |
| American G              |
| Interprete              |
| A Hologram              |
| The Circle              |
| The Amazin              |
| Just Kids               |
| A Heartbre              |
| Coraline                |
| What We Ta              |
| Where I'm               |
| White Nois              |
| Cannery Ro              |
| Oblivion:               |
| Consider t              |
+-------------------------+
16 rows in set (0.00 sec)

10글자로 끊고 마지막에 ...을 붙여주고 싶으면 어떻게 해야할까?
저번에 공부한 CONCAT을 사용하면 된다.

SELECT 
	CONCAT
    (
    	SUBSTRING(title,1,10),
        '...'
    ) AS 'short title' 
FROM books;
+---------------+
| short title   |
+---------------+
| The Namesa... |
| Norse Myth... |
| American G... |
| Interprete... |
| A Hologram... |
| The Circle... |
| The Amazin... |
| Just Kids...  |
| A Heartbre... |
| Coraline...   |
| What We Ta... |
| Where I'm ... |
| White Nois... |
| Cannery Ro... |
| Oblivion: ... |
| Consider t... |
+---------------+
16 rows in set (0.00 sec)
profile
임재현입니다.
post-custom-banner

0개의 댓글