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

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

convertは、SQLでデータ型の変換をおこなう関数です。EUCやUTF8の変換などキャラクターセットの変更が可能です。

SQLのconvertの構文

convertは、値のデータ型を変換する関数です。データベースにより、使い方に差異があります。

例えば、MySQLの場合は、以下の書式で文字列をutf8のキャラクターセットに変換可能です。

mysql> select convert( 'abc' using utf8 );
+-----------------------------+
| convert( 'abc' using utf8 ) |
+-----------------------------+
| abc                         |
+-----------------------------+
1 row in set, 1 warning (0.00 sec)

関連)MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.10 キャスト関数と演算子

convert関数を使ってユーザ変数に代入することで、キャラクタセットを指定することが可能です。

/* ユーザ変数@aにabcを代入 */
mysql> set @a='abc';
Query OK, 0 rows affected (0.00 sec)

/* @aのキャラクタセットがlatin1 */であることを確認
mysql> select charset(@a);
+-------------+
| charset(@a) |
+-------------+
| latin1      |
+-------------+
1 row in set (0.00 sec)

/* convertを使って、utf8に変換した文字列を@aに代入 */
mysql> set @a=convert('abc' using utf8);
Query OK, 0 rows affected, 1 warning (0.00 sec)

/* @aのキャラクタセットが、utf8になっている */
mysql> select charset(@a);
+-------------+
| charset(@a) |
+-------------+
| utf8        |
+-------------+
1 row in set (0.00 sec)

データ型によっては、暗黙に自動変換されるケースがあります。例えば、以下のように整数型の値をconvert関数でchar型に変更することは可能ですが、整数型とchar型は暗黙に自動変換されるのでconvert関数自体が不要となります。

mysql> select convert(1, char(10)), convert(2,char(10));
+----------------------+---------------------+
| convert(1, char(10)) | convert(2,char(10)) |
+----------------------+---------------------+
| 1                    | 2                   |
+----------------------+---------------------+
1 row in set (0.00 sec)

mysql> select concat(convert(1, char(10)), convert(2,char(10)));
+---------------------------------------------------+
| concat(convert(1, char(10)), convert(2,char(10))) |
+---------------------------------------------------+
| 12                                                |
+---------------------------------------------------+
1 row in set (0.00 sec)

/* convertを使用しなくても同じ結果になる */
mysql> select concat(1,2);
+-------------+
| concat(1,2) |
+-------------+
| 12          |
+-------------+
1 row in set (0.00 sec)

同様に、char型の’1’と’3’は、convert関数を使わなくても、整数型に自動変換されます。

mysql> select convert('1',signed)+convert('3',signed);
+-----------------------------------------+
| convert('1',signed)+convert('3',signed) |
+-----------------------------------------+
|                                       4 |
+-----------------------------------------+
1 row in set (0.02 sec)

mysql> select '1'+'3';
+---------+
| '1'+'3' |
+---------+
|       4 |
+---------+
1 row in set (0.01 sec)

-10をunsigned(符号なし)、sigined(符号あり)に変換すると、それぞれ以下のようになります。

mysql> select convert( '-10', unsigned);
+---------------------------+
| convert( '-10', unsigned) |
+---------------------------+
|      18446744073709551606 |
+---------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> select convert( '-10', signed);
+-------------------------+
| convert( '-10', signed) |
+-------------------------+
|                     -10 |
+-------------------------+
1 row in set (0.00 sec)

‘1’をバイナリ型に変換すると、以下のようになります。

mysql> select convert( '1', binary);
+----------------------------------------------+
| convert( '1', binary)                        |
+----------------------------------------------+
| 0x31                                         |
+----------------------------------------------+
1 row in set (0.00 sec)

文字列をdatetime型に変換すると、以下のようになります。

mysql> select convert( '200320121500', datetime);
+------------------------------------+
| convert( '200320121500', datetime) |
+------------------------------------+
| 2020-03-20 12:15:00                |
+------------------------------------+
1 row in set (0.00 sec)

Oracleのconvertは、現行リリースでは推奨されない

Oracleでは、convertファンクションは「文字列を別のキャラクタセットに変換する」関数です。公式サイトによると、Oracleの現行のリリースでは、convertファンクションを使用しないことが推奨されています。

例えば、以下はLatin-1文字列を、ASCIIのキャラクタセットに変換するSQLです。

SELECT CONVERT('Ä Ê Í Õ Ø A B C D E ', 'US7ASCII', 'WE8ISO8859P1') 
   FROM DUAL; 

CONVERT('ÄÊÍÕØABCDE' 
--------------------- 
A E I ? ? A B C D E ?

関連)OracleのCONVERT

SQL Serverのconvertの暗黙・明示変換表

SQL Serverのconvert関数は、値の型変換をおこないます。

出典)CAST および CONVERT (Transact-SQL) – SQL Server | Microsoft Docs

上記マトリックスの、青い四角系の箇所は、convert関数を使った明示的な変換が必要になります。オレンジの丸の箇所は、特に変換処理が不要で暗黙に自動変換されます。

PostgreSQLのconvertは、変換方法の定義が可能

PostgreSQLでは、以下の指定で型の変換が可能です。

convert('PostgreSQL' using iso_8859_1_to_utf_8)	

なお、usingを使った変換は、事前に変換方法をcreate convertで定義しておく必要があります。下記の指定方法は、変換対象と変換後のキャラクターセットを指定できます。

select convert( 'text_in_unicode', 'UNICODE', 'LATIN1');
             convert              
----------------------------------
 \x746578745f696e5f756e69636f6465
(1 row)

関連)PostgreSQLの文字列関数と演算子

まとめ

ポテパンダの一言メモ
  • convert関数は、値の型を変換する関数。キャラクタセットの変換も可能。
  • Oracleのconvert関数の利用は推奨されていない。
  • PostgreSQLでは、convertの方式を事前に定義可能。

 

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

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

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

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

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

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

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

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

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

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

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