SQLで文字列を扱っていると、「見た目は同じなのに一致しない」「不要な空白が原因で検索や比較がうまくいかない」といった問題に直面することがあります。
特に、日本語データを扱う場合は、半角スペースと全角スペースが混在しやすく、意図しない不具合の原因になりがちです。
本記事では、SQLで文字列中の全角・半角スペースを削除したい場合に、REPLACE関数を使って確実に解決する方法を、基本から実務での注意点まで丁寧に解説します。
全角スペースと半角スペースの違い

まず前提として、全角スペースと半角スペースは文字コード上でまったく異なる文字です。
- 半角スペース
一般的な英数字と同じ幅のスペース - 全角スペース
日本語文字と同じ幅を持つスペース
見た目では区別しにくいものの、SQLでは別の文字として扱われるため、以下のような問題が発生します。
- WHERE句で一致しない
- JOIN条件が成立しない
- UNIQUE制約や重複チェックで想定外の結果になる
これらを防ぐためには、不要なスペースを事前に削除、または正規化することが重要です。
REPLACE関数の基本構文
SQLで文字を置換する際に使うのが REPLACE 関数です。
基本構文は以下の通りです。
|
1 |
REPLACE(対象文字列, 置換前文字列, 置換後文字列) |
この関数は、対象文字列の中に含まれる「置換前文字列」をすべて検索し、「置換後文字列」に置き換えます。
半角スペースを削除する方法
半角スペースだけを削除したい場合は、次のように記述します。
|
1 |
REPLACE(カラム名, ' ', '') |
このSQLでは、カラム内に含まれる半角スペースをすべて空文字に置き換えています。
結果として、文字列中の半角スペースが完全に削除されます。
例として、以下のようなデータがある場合を考えます。
|
1 |
'ABC DEF GHI' |
この文字列に対して上記のREPLACEを適用すると、結果は次のようになります。
|
1 |
'ABCDEFGHI' |
全角スペースを削除する方法
全角スペースを削除する場合は、置換対象を全角スペースにする必要があります。
|
1 |
REPLACE(カラム名, ' ', '') |
ここで注意すべき点は、シングルクォート内のスペースが「全角スペース」であることです。
エディタやフォントによっては見分けがつきにくいため、コピー&ペースト時は特に注意が必要です。
全角・半角スペースを同時に削除する方法
実務では、全角スペースと半角スペースが混在しているケースがほとんどです。
その場合は、REPLACE関数を入れ子にして両方を削除します。
|
1 2 3 4 5 |
REPLACE( REPLACE(カラム名, ' ', ''), ' ', '' ) |
内側のREPLACEで半角スペースを削除し、その結果に対して外側のREPLACEで全角スペースを削除しています。
この方法により、文字列中のすべての空白を確実に除去できます。
UPDATE文でデータを直接修正する例
SELECTで確認するだけでなく、実際にデータを更新したい場合は、UPDATE文と組み合わせて使用します。
|
1 2 3 4 5 6 |
UPDATE テーブル名 SET カラム名 = REPLACE( REPLACE(カラム名, ' ', ''), ' ', '' ); |
このSQLを実行すると、対象カラム内の全角・半角スペースがすべて削除されます。
本番環境で実行する際は、必ず事前にSELECTで影響範囲を確認し、バックアップを取得してください。
WHERE句でスペースを無視して比較する方法
データ自体は変更せず、検索時だけスペースを無視したい場合もあります。
その場合は、WHERE句内でREPLACEを使用します。
|
1 2 3 4 5 |
WHERE REPLACE( REPLACE(カラム名, ' ', ''), ' ', '' ) = 'ABC' |
このように記述することで、スペースの有無に関係なく比較が可能になります。
TRIM関数との違い
スペース削除というと、TRIM関数を思い浮かべる方も多いかもしれません。
しかし、TRIM関数には明確な制限があります。
- TRIMは文字列の先頭と末尾のみが対象
- 文字列の途中にあるスペースは削除できない
- DB製品によっては全角スペースに対応していない場合がある
文字列全体から確実にスペースを除去したい場合は、REPLACEを使用するのが適切です。
データ品質を保つための実務上の注意点
全角・半角スペースの混在は、以下のような場面で特に発生しやすくなります。
- CSVやExcelからのデータ取り込み
- 手入力によるマスタ登録
- 外部システムとのデータ連携
そのため、以下の対策を取ることが重要です。
- 取り込み時にREPLACEで正規化する
- 登録前チェックでスペース除去を行う
- 比較処理ではスペースを除いた状態で判定する
これらを徹底することで、後工程での不具合を大きく減らすことができます。
DBMS毎の全角・半角スペース削除の対応比較
SQLは共通仕様が多い一方で、文字列関数の挙動や全角スペースへの対応はDBMSによって差があります。
ここでは、実務でよく使われる主要DBMSについて、REPLACEやTRIMの対応状況を比較します。
| DBMS | 半角スペース削除 | 全角スペース削除 | TRIMの対応範囲 | 備考 |
|---|---|---|---|---|
| Oracle Database | 可能(REPLACE) | 可能(REPLACE) | 先頭・末尾のみ | TRIMは途中のスペースを削除不可 |
| MySQL | 可能(REPLACE) | 可能(REPLACE) | 先頭・末尾のみ | 全角スペースは明示指定が必要 |
| PostgreSQL | 可能(REPLACE) | 可能(REPLACE) | 先頭・末尾のみ | 正規表現関数も利用可能 |
| SQL Server | 可能(REPLACE) | 可能(REPLACE) | 先頭・末尾のみ | LTRIM/RTRIMは半角のみ |
| SQLite | 可能(REPLACE) | 可能(REPLACE) | 先頭・末尾のみ | TRIMは全角非対応 |
まとめ
SQLで全角・半角スペースを削除したい場合は、REPLACE関数を使うことでシンプルかつ確実に対応できます。
特に日本語データを扱う現場では、スペースの違いが原因で思わぬ不具合が発生しがちです。
- 半角スペースは
' ' - 全角スペースは
' ' - 両方削除する場合はREPLACEを入れ子にする
この基本を押さえておけば、文字列処理に関するトラブルを未然に防ぐことができます。


