SQLの数値を他の型に変換する方法についてまとめています。
SQLの数値の型変換はCASTまたはCONVERT
SQLで数値を型変換するには、CAST関数またはCONVERT関数を使用します。
数値を文字列に変換するにはCONVERTだが、暗黙の変換も
数値を文字列に変換などデータ型をコンバートするにはCONVERT関数を使います。しかし、convertを使わなくても暗黙的に型変換が行われるケースもあり。
下記の例では、convertで数値を文字列に変換してから文字列を結合する関数concatを使った場合と、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 | +-------------+
【関連記事】
▶SQL convertは、値の型変換をおこなう 文字列のキャラクターセット変更が可能
下記の例では、数値型の文字列に変換すると、0詰めやカンマ編集が可能になります。
他にも、数値を指定すると文字列型に変換した上で加工を行う関数もあります。
MySQLのformat関数は、数値と小数点以下の桁数を指定するとカンマ区切り編集をおこなった文字列に変換します。
mysql> select employees.emp_no, first_name, last_name, format(salary,0) from employees left join salaries on employees.emp_no = salaries.emp_no where to_date = '9999-01-01' limit 10; +--------+------------+-----------+------------------+ | emp_no | first_name | last_name | format(salary,0) | +--------+------------+-----------+------------------+ | 10001 | Georgi | Facello | 88,958 | | 10002 | Bezalel | Simmel | 72,527 | | 10003 | Parto | Bamford | 43,311 | | 10004 | Chirstian | Koblick | 74,057 | | 10005 | Kyoichi | Maliniak | 94,692 | | 10006 | Anneke | Preusig | 59,755 | | 10007 | Tzvetan | Zielinski | 88,070 | | 10009 | Sumant | Peac | 94,409 | | 10010 | Duangkaew | Piveteau | 80,324 | | 10012 | Patricio | Bridgland | 54,423 | +--------+------------+-----------+------------------+
上記の例は、employees(社員)テーブルとsalaries(年収)テーブルを結合して、salary(年収)をカンマ編集する例です。なお、to_date=’9999-01-01’という条件は、最新の年収データを取得するためのものです。
castとconvertの違いは、文字列の扱い
cast関数は、以下の形式で値をデータ型に変換する関数です。
cast(値 as データ型)
【関連記事】
▶SQL castはデータ型の明示的な変換 データベースによって、オプションに差異あり
convert関数との違いは、引数の渡し方以外に文字列に対する文字セット変換機能があります。
mysql> select convert( 'abc' using utf8 ); +-----------------------------+ | convert( 'abc' using utf8 ) | +-----------------------------+ | abc | +-----------------------------+ 1 row in set, 1 warning (0.00 sec)
上記の例は、文字列abcをutf8キャラクターセットに変換する例です。
【関連記事】
▶SQL convertは、値の型変換をおこなう 文字列のキャラクターセット変更が可能
なお、Oracleの場合は「convertは文字列のキャラクターセットを変更する関数」と位置づけられており、単にデータ型の変換をconvert関数で行うのは非推奨とされています。
まとめ
- SQLで数値型を文字列型に変換するには、castまたはconvert
- 暗黙の変換により、自動的に型変換が行われるケースもあり
- convertには、文字列のキャラクターセットを変更するという機能もある