Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLのconvertについてまとめています。

SQL convertの構文

convertは、convert(値,変換後のデータ型)という指定方法で、異なるデータ型に変換が可能です。以下は、employees(社員)テーブルから、社員番号、姓名にbirth_dateとbirth_dateをconvertで符号なし整数(unsigned)に変換したデータをselectするSQLです。

  1. mysql>SELECT emp_no,
  2. first_name,
  3. last_name,
  4. birth_date,
  5. CONVERT( BIRTH_DATE, unsigned )
  6. FROM employees limit 10;
  7.  
  8. +--------+------------+-----------+------------+---------------------------------+
  9. | emp_no | first_name | last_name | birth_date | convert( birth_date, unsigned ) |
  10. +--------+------------+-----------+------------+---------------------------------+
  11. | 10001 | Georgi | Facello | 1953-09-02 | 19530902 |
  12. | 10002 | Bezalel | Simmel | 1964-06-02 | 19640602 |
  13. | 10003 | Parto | Bamford | 1959-12-03 | 19591203 |
  14. | 10004 | Chirstian | Koblick | 1954-05-01 | 19540501 |
  15. | 10005 | Kyoichi | Maliniak | 1955-01-21 | 19550121 |
  16. | 10006 | Anneke | Preusig | 1953-04-20 | 19530420 |
  17. | 10007 | Tzvetan | Zielinski | 1957-05-23 | 19570523 |
  18. | 10008 | Saniya | Kalloufi | 1958-02-19 | 19580219 |
  19. | 10009 | Sumant | Peac | 1952-04-19 | 19520419 |
  20. | 10010 | Duangkaew | Piveteau | 1963-06-01 | 19630601 |
  21. +--------+------------+-----------+------------+---------------------------------+
  22. 10 rows in set (0.00 sec)

castと同じ機能が利用可能です。

【関連記事】
SQL castはデータ型の明示的な変換 データベースによって、オプションに差異あり

SQL convertの使い方

convertは文字列の文字コード変換が可能

convert(値 using 文字コード)でキャラクターコードの変換が可能です。

  1. mysql> select convert( 'abc' using utf8 );
  2. +-----------------------------+
  3. | convert( 'abc' using utf8 ) |
  4. +-----------------------------+
  5. | abc |
  6. +-----------------------------+
  7. 1 row in set, 1 warning (0.00 sec)

なお、変換した文字列は、charset()関数でキャラクターセットが確認できます。

  1. /* ユーザ変数@aにabcを代入 */
  2. mysql> set @a='abc';
  3. Query OK, 0 rows affected (0.00 sec)
  4.  
  5. /* @aのキャラクタセットがlatin1 */であることを確認
  6. mysql> select charset(@a);
  7. +-------------+
  8. | charset(@a) |
  9. +-------------+
  10. | latin1 |
  11. +-------------+
  12. 1 row in set (0.00 sec)
  13.  
  14. /* convertを使って、utf8に変換した文字列を@aに代入 */
  15. mysql> set @a=convert('abc' using utf8);
  16. Query OK, 0 rows affected, 1 warning (0.00 sec)
  17.  
  18. /* @aのキャラクタセットが、utf8になっている */
  19. mysql> select charset(@a);
  20. +-------------+
  21. | charset(@a) |
  22. +-------------+
  23. | utf8 |
  24. +-------------+
  25. 1 row in set (0.00 sec)

【関連記事】
SQL convertは、値の型変換をおこなう 文字列のキャラクターセット変更が可能

convertで文字列変換後、likeであいまい検索

カラムを文字列に変換後、likeによるあいまい検索が可能になります。以下の例は、int型のemp_noを文字列に変換し、likeでemp_noに123を含む社員番号を抽出しています。

  1. mysql>SELECT *
  2. FROM employees
  3. WHERE CONVERT(EMP_NO, Char(5)) LIKE '%123%' limit 10;
  4. +--------+------------+------------+-------------+--------+------------+
  5. | emp_no | birth_date | first_name | last_name | gender | hire_date |
  6. +--------+------------+------------+-------------+--------+------------+
  7. | 10123 | 1962-05-12 | Hinrich | Randi | M | 1993-01-15 |
  8. | 11123 | 1956-10-21 | Herb | Cooley | F | 1988-03-28 |
  9. | 11230 | 1956-12-28 | Yakichi | Tzvieli | M | 1990-12-06 |
  10. | 11231 | 1959-01-28 | Marit | Narwekar | F | 1988-04-07 |
  11. | 11232 | 1955-09-03 | Hidefumi | Crelier | M | 1988-02-02 |
  12. | 11233 | 1952-05-08 | Sanjit | Waschkowski | F | 1991-06-17 |
  13. | 11234 | 1961-06-17 | Tooru | Vingron | M | 1990-08-21 |
  14. | 11235 | 1964-11-13 | Larisa | Schueller | F | 1988-05-31 |
  15. | 11236 | 1963-01-27 | Marek | Orlowska | M | 1994-03-24 |
  16. | 11237 | 1964-03-21 | Brendon | Salinas | M | 1986-03-30 |
  17. +--------+------------+------------+-------------+--------+------------+
  18. 10 rows in set (0.01 sec)

ただし、convert後の検索にはインデックスが使用されないため複雑な条件や大量データに対しては速度低下の原因になります。

【関連記事】
sql likeを使ったサンプル集 likeは本当に遅いのか? 

まとめ

ポテパンダの一言メモ
  • convertはcastと同様データ型の変換が可能
  • convertのusing指定で文字コードの変換が可能
  • convertで文字列に変換後はlikeによるあいまい検索が可能

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。