MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで文字列から2つ以上の連続スペースを削除する方法

MySQLで文字列から2つ以上の連続スペースを削除する方法

MySQLには、文字列内に含まれる2つ以上の連続した半角スペースをまとめて削除(または1つに圧縮)する組み込み関数は用意されていません。しかし、ストアドファンクション(ユーザー定義関数)を自作することで、この処理を簡単かつ再利用可能な形で実現できます。

まず、関数を作成するための基本構文は以下のとおりです。

DELIMITER //
CREATE FUNCTION 関数名(パラメータ1,...N) RETURNS データ型
BEGIN
  -- 処理内容
END;
//
DELIMITER ;

スペース削除関数の作成例

それでは、実際に文字列から余分なスペースを取り除く関数「function_DeleteSpaces」を作成してみましょう。以下のように記述します。

mysql> delimiter //
mysql> create function function_DeleteSpaces(value varchar(200)) returns varchar(200)
    -> begin
    -> set value = trim(value);
    -> while instr(value, '  ') > 0 do
    -> set value = replace(value, '  ', ' ');
    -> end while;
    -> return value;
    -> END;
    -> //
Query OK, 0 rows affected (0.20 sec)
mysql> delimiter ;

この関数の仕組みを簡単に解説します。

  • trim(value):文字列の先頭と末尾にある余分なスペースを除去します。
  • while instr(value, ' ') > 0:文字列内に2つ以上の連続スペースが存在する限り、ループ処理を繰り返します。
  • replace(value, ' ', ' '):連続する2つのスペースを1つのスペースに置き換えます。これを繰り返すことで、3つ以上のスペースも最終的にすべて1つにまとめられます。

作成した関数の呼び出し方

関数を作成したら、SELECT文を使って呼び出すことができます。基本構文は次のとおりです。

SELECT 関数名();

実際に、先ほど作成した関数に文字列を渡して実行してみましょう。

mysql> select function_DeleteSpaces(' John Smith ');

実行結果は以下のとおりです。先頭・末尾のスペースが除去され、単語間の連続スペースも1つに正規化されていることがわかります。

+--------------------------------------------------+
| function_DeleteSpaces(' John Smith ')            |
+--------------------------------------------------+
| John Smith                                       |
+--------------------------------------------------+
1 row in set (0.02 sec)

別の例として、パラメータに新しい値を指定して実行してみます。

mysql> select function_DeleteSpaces(' John Smith 123 ');

実行結果:

+---------------------------------------------------------+
| function_DeleteSpaces(' John Smith 123 ')               |
+---------------------------------------------------------+
| John Smith 123                                          |
+---------------------------------------------------------+
1 row in set (0.00 sec)

まとめ

このように、TRIM()で前後のスペースを除去し、WHILEループとREPLACE()を組み合わせて連続スペースを順次1つに置き換えることで、文字列から2つ以上のスペースを効率的に削除できます。一度関数を作成しておけば、任意のクエリから何度でも呼び出せるため、入力データのクレンジングや検索条件の正規化など、さまざまな場面で活用できる便利なテクニックです。

  1. MySQLで文字列から日付を抽出する方法|SUBSTRING_INDEX関数の実践的な使い方

    MySQLで文字列から日付を抽出するには?MySQLで文字列の中から日付部分だけを取り出したい場合、SUBSTRING_INDEX() 関数を使うのが便利です。この関数は、指定した区切り文字を基準に文字列を分割し、必要な部分を取得できます。ここでは、実際にテーブルを作成し、文章の中に含まれる日付(例:12/31/2018)を抽出する手順を解説します。1. サンプルテーブルを作成するまず、文字列を格納するためのテーブルを作成します。mysql> create table DemoTable -> ( -> Title text -> );Query OK

  2. MySQLで他のカラムの値から新しいカラムの値を導出する方法

    MySQLではユーザー定義変数(ユーザー変数)を活用することで、既存のカラムの値をもとに別のカラムの値を計算・導出できます。本記事では、累積和(累積合計)を求める具体例を通して、その方法をわかりやすく解説します。サンプルテーブルの作成まず、テーブルを作成します。mysql> create table DemoTable1868 ( Value int ); Query OK, 0 rows affected (0.00 sec)レコードの挿入insertコマンドを使って、テーブルにデータを挿入します。mysql> insert into DemoTable1