文字列から空白を取り除く作業は、データのクリーニングや準備でよく行われるタスクです。文字列操作関数の実装はデータベースごとに異なりますが、いずれもデータをよりクリーンで一貫性のあるものにすることを目的としています。このガイドでは、MySQL、PostgreSQL、SQL Server、SQLiteなどさまざまなデータベースでSQLを使って空白をトリムする方法を解説します。
なぜ空白をトリムするのか?
データには意図せず空白が含まれてしまうことがあり、クエリやレポートにおけるデータの一貫性や正確性に問題を引き起こします。空白を取り除くことで、比較や結合が期待どおりに動作するようになります。
実際に試してみる
これらのTRIM関数をすぐに試してみたいですか?MySQL、PostgreSQL、SQL Server、SQLiteの各方言に対応したSQL構文チェッカーツールで、SQLクエリを検証できます。
実際のデータベースで練習するなら、DB Fiddleを試してみてください。ブラウザ上でMySQL、PostgreSQL、SQLiteデータベースに対してSQLクエリを実行できる無料のオンラインツールです。
MySQLで空白をトリムする
MySQLには空白をトリムするための関数がいくつか用意されています。ここでは、先頭、末尾、またはその両方の空白を削除できるTRIM()を取り上げます。
構文
TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)
- BOTH:先頭と末尾の両方の文字を削除します。
- LEADING:先頭の文字を削除します。
- TRAILING:末尾の文字を削除します。
- remstr:削除する文字または空白(デフォルトは空白)。
例
SELECT TRIM(' Hello World ') AS trimmed_string;
期待される出力:
+----------------+
| trimmed_string |
+----------------+
| Hello World |
+----------------+
特定の文字を指定する例
SELECT TRIM(BOTH '-' FROM '---Hello World---') AS trimmed_string;
期待される出力:
+----------------+
| trimmed_string |
+----------------+
| Hello World |
+----------------+
PostgreSQLで空白をトリムする
PostgreSQLにも同様のTRIM()関数があります。
例
SELECT TRIM(' PostgreSQL User ') AS trimmed_string;
期待される出力:
+------------------+
| trimmed_string |
+------------------+
| PostgreSQL User |
+------------------+
専用の関数を使う
PostgreSQLはLTRIM()とRTRIM()もサポートしています。
- LTRIM():先頭の空白を削除します。
- RTRIM():末尾の空白を削除します。
例
SELECT LTRIM(' Leading whitespace') AS ltrimmed_string;
SELECT RTRIM('Trailing whitespace ') AS rtrimmed_string;
期待される出力:
+--------------------+
| ltrimmed_string |
+--------------------+
| Leading whitespace |
+--------------------+
+--------------------+
| rtrimmed_string |
+--------------------+
| Trailing whitespace|
+--------------------+
SQL Serverで空白をトリムする
SQL Server 2017以降では標準のTRIM()関数がサポートされており、デフォルトで先頭と末尾の両方の空白を削除します。
TRIM()を使う(SQL Server 2017+)
SELECT TRIM(' SQL Server ') AS trimmed_string;
期待される出力:
+----------------+
| trimmed_string |
+----------------+
| SQL Server |
+----------------+
LTRIM()とRTRIM()を使う(全バージョン)
古いバージョンのSQL Serverや、片側だけをトリムしたい場合は、LTRIM()とRTRIM()を使います。
SELECT LTRIM(' SQL Server') AS ltrimmed_string;
SELECT RTRIM('SQL Server ') AS rtrimmed_string;
期待される出力:
+-----------------+
| ltrimmed_string |
+-----------------+
| SQL Server |
+-----------------+
+-----------------+
| rtrimmed_string |
+-----------------+
| SQL Server |
+-----------------+
古いバージョンで先頭と末尾の両方の空白を削除するには、関数を入れ子にします:
SELECT LTRIM(RTRIM(' SQL Server ')) AS fully_trimmed_string;
期待される出力:
+----------------------+
| fully_trimmed_string |
+----------------------+
| SQL Server |
+----------------------+
SQLiteで空白をトリムする
SQLiteではTRIM()関数を使います。動作はMySQLの実装とほぼ同じです。
例
SELECT TRIM(' Hello SQLite ') AS trimmed_string;
期待される出力:
+---------------+
| trimmed_string|
+---------------+
| Hello SQLite |
+---------------+
実践例:テーブルのデータをクリーニングする
TRIM関数を使ってテーブルのデータをクリーニングする実例を紹介します。空白の問題を抱えたcustomersテーブルがあるとします:
CREATE TABLE customers (
id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
INSERT INTO customers VALUES
(1, ' John Doe ', ' john@example.com'),
(2, 'Jane Smith ', 'jane@example.com '),
(3, ' Bob Wilson', ' bob@example.com ');
UPDATE customers
SET name = TRIM(name),
email = TRIM(email);
SELECT id, CONCAT('[', name, ']') AS name, CONCAT('[', email, ']') AS email
FROM customers;
このパターンは主要なデータベースすべてで使えますが、CONCATの正確な構文は若干異なる場合があります。
まとめ
SQLでの空白のトリムは、シンプルながらデータの正規化や準備に役立つ強力な操作です。データベースごとに構文や機能は異なりますが、基本的な機能は共通しています。これらのトリム関数を活用してデータを意図どおりの状態に保ち、SQLデータベース全体で正確なクエリとレポートを実現しましょう。
Beekeeper Studioは無料のオープンソースのデータベースGUIです
これまで使った中で最高のSQLクエリ&エディタツールです。データベースの管理に必要なものがすべて揃っています。 - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studioは高速で直感的、そして使いやすいツールです。多数のデータベースに対応し、Windows、Mac、Linuxで快適に動作します。
Beekeeper Studio 利用者の声
「Beekeeper Studioで以前のSQLワークフローを完全に置き換えました。高速で直感的、データベース作業がまた楽しくなりました。」
「多くのデータベースGUIを試してきましたが、Beekeeperは機能とシンプルさのバランスが完璧です。とにかくちゃんと動きます。」