MySQL - SUBSTRING


UDEMY-The Ultimate MySQL Bootca…The Ultimate MySQL Bootcamp:Go from SQL Beginner to Expert

SUBSTRING


正式な書類
一番いい方法はやはり公式文書を見ることです.
CONCATは、SUBSTRINGのようなString Functionの1つである.実はサーブが有名です.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から、2番目のパラメータとしてのインデックスから、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)
    
    3番目のパラメータを追加しないで、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)