UDEMY - The Ultimate MySQL Bootca…The Ultimate MySQL Bootcamp: Go from SQL Beginner to Expert를 수강하며 정리한 글
공식문서
가장 좋은 방법은 역시 공식 문서를 보는 것이다.
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)