SQLで全角・半角の変換をする
SQLでテーブル内のデータの値を全角から半角に、逆に半角から全角に変換して取得したい場合もあるでしょう。
全角・半角に変換する用の関数はあるのか気になりますよね。
そこでこの記事では、SQLで全角と半角を変換する方法について解説します。
MySQLで全角・半角変換をする場合
MySQLの場合、残念ながら全角・半角を変換する関数というのは用意されていません。
もし、全角・半角の変換を行いたい場合は「REPLACE関数」を使うのが簡単でしょう。
REPLACE関数は、文字列の一部を置換できる関数です。
REPLACE関数を使うには、次のように記述しましょう。
SELECT REPLACE('対象の文字列', '置換前の文字列', '置換後の文字列' );
REPLACE関数の第一引数には、置換を行う対象の文字列を記述します。
第二引数に、置換前の文字列を記述し、第三引数に置換後の文字列を指定しましょう。
また、第三引数の文字列を省略すると、置換前の文字列が削除されます。
特定の文字を削除したい場合に便利です。
では、実際にREPLACE関数を使って、全角・半角の変換を行ってみます。
次のように記述しましょう。
SELECT REPLACE('potepan', 'pote', 'pote' );
上記のSQL文は、「potepan」という文字列の「pote」だけ全角に変換しています。
実行すると結果は次のようになりました。
mysql> SELECT REPLACE('potepan', 'pote', 'pote' ); +---------------------------------------------+ | REPLACE('potepan', 'pote', 'pote' ) | +---------------------------------------------+ | potepan | +---------------------------------------------+ 1 row in set (0.00 sec)
期待通りの文字列が全角に変換されています。
逆に、全角文字を半角にすることも可能です。
mysql> SELECT REPLACE('potepan', 'pote', 'pote' ); +-----------------------------------------------------------+ | REPLACE('potepan', 'pote', 'pote' ) | +-----------------------------------------------------------+ | potepan | +-----------------------------------------------------------+ 1 row in set (0.00 sec)
また、カタカナの全角・半角変換もできます。
mysql> SELECT REPLACE('ポテパンスタイル', 'ポテパン', 'ポテパン' ) change_name; +--------------------------+ | change_name | +--------------------------+ | ポテパンスタイル | +--------------------------+ 1 row in set (0.00 sec)
それぞれ期待した動作になっていますね。
REPLACE関数の使い方については、他記事でも解説していますので参考にしてみてください!
【関連記事】
▶︎【MySQL】作業効率を高める!MySQLクエリの良い所取り「REPLACE」についての解説
▶︎SQLで文字列の置換をするにはreplace関数使用。 複数置換をするサンプルコード
Oracleで全角・半角変換をする場合
Oracleで全角・半角変換をする場合には、「TO_MULTI_BYTE関数」「TO_SINGLE_BYTE関数」が使えます。
半角から全角に変換する場合はTO_MULTI_BYTE関数を、全角から半角に変換する場合はTO_SINGLE_BYTE関数を使いましょう。
ただし、半角・全角カタカナの変換とAL16UTF16 などのマルチバイトのアスキーコードは変換されません。
それぞれ、次のように記述します。
SELECT TO_MULTI_BYTE('potepan') FROM DUAL; SELECT TO_SINGLE_BYTE('potepan') FROM DUAL;
執筆者がOracleを使用していないため、実行結果はカットします。
PostgreSQLで全角・半角変換をする場合
PostgreSQLで全角・半角変換をする場合は、MySQL同様にREPLACE関数を使って変換可能です。
また、PostgreSQLでは「TRANSLATE関数」も使えます。
TRANSLATE関数は、文字列を別の文字列に置換する関数です。
次のように記述できます。
SELECT TRANSLATE('対象の文字列', '置換対象の文字列', '置換後の文字列' );
REPLACE関数との違いは、完全一致の要否です。
REPLACE関数は、第二引数に指定した文字列を単語単位で検索します。
そのため、第一引数(対象の文字列)の中に、完全一致する文字列がない場合は置換が行われません。
一方で、TRANSLATE関数は、第二引数の文字列の先頭から1文字ずつ検索し、位置が対応している第三引数へ置換が行われます。
つまり、置換したい文字が第一引数の中に含まれていれば、単語単位でなくても一度に置換可能なのです。
TRANSLATE関数の方が使い勝手が良いとも言えます。
では、それぞれの動作の違いも確認しつつ、全角・半角の変換を行ってみましょう。
次のように記述すると、半角から全角へ変換できるはずです。
SELECT TRANSLATE('potepan', 'aenopt', 'aenopt' ); translate ----------- potepan (1 row)
対象の文字列は「potepan」となっており、第二引数は「aenopt」と半角英字を並べています。
この英字の並びに合わせて、第三引数には全角の「aenopt」を指定しました。
これによって、「a」は「a」に、「e」は「e」に置換される、といった処理になるのです。
第二引数と第三引数を入れ替えれば、全角から半角への変換もできます。
このTRANSLATE関数と同じ指定を、REPLACE関数ではできません。
よって、TRANSLATE関数の方が使い勝手が良いと言えるのです。
その他よく使われる変換について
ここでは、各DBMSごとに全角・半角を変換する方法を紹介しました。
SQLを扱う際には、全角・半角以外にもさまざまな「変換」を行うことがあります。
例えば、現在格納している文字列を変換してアップデートや、「データ型」の変換もその一つです。
テーブルに格納したデータは「ただ格納して終わり」ということは少なく、何かしらの加工や変換処理を施す機会も多いと言えます。
そのため、ここで紹介した全角・半角の変換以外の変換方法も、SQLを扱う上で知っておくと良いでしょう。
当サイトでは、SQLに関する豊富な情報を発信しています。
変換に関する記事も執筆していますので、この機会によければ参考にしてみてください!
【関連記事】
▶︎SQLでデータ型を変換する方法とは!?CAST/CONVERT関数の使い方
▶︎TO_CHAR関数の使い方を解説!SQLで数値や日付を書式を指定して文字列に変換
▶︎SQLで文字列と数値を変換する 数値をゼロ詰めフォーマットする方法
SQLで全角・半角を変換する方法まとめ
SQLで全角から半角、半角から全角に変換する方法を紹介しました。
MySQLで変換する場合は、REPLACE関数 を使いましょう。
PostgreSQLであれば、REPLACE関数 に加えて TRANSLATE関数 も使用可能です。
TRANSLATE関数は、単語単位ではなく1文字ずつ変換を指定できるので、積極的に使うべき関数と言えます!
Oracleの場合は、TO_MULTI_BYTE関数 と TO_SINGLE_BYTE関数 が用意されていますので、こちらを使いましょう。
全角・半角以外の変換についても、合わせて理解を深めてみてくださいね。
極端な話、第二引数と第三引数に「a〜z」の全角・半角など、すべての文字を指定すればどんな単語でも変換可能になります。