MySQLでINITCAP()関数の逆の処理を実装する方法:独自関数の作成手順を解説
INITCAP()関数とその逆の処理について
INITCAP()関数は、文字列に含まれるすべての単語の先頭文字を大文字にし、残りの文字を小文字に変換して表示します。英語のタイトル表記などでよく使われる形式です。
一方で、その逆の処理、すなわち「各単語の先頭文字を小文字にし、残りの文字を大文字にする」変換が必要になるケースもあります。しかし、MySQLには標準でこのような機能を持つ関数は用意されていないため、独自のユーザー定義関数を作成する必要があります。
カスタム関数の作成手順
以下は、渡された文字列に対して「先頭文字を小文字・残りを大文字」に変換する関数 convertFirstLetterToLowerAndRemainingToCapital を作成する例です。
mysql> delimiter //
mysql> create function convertFirstLetterToLowerAndRemainingToCapital(value varchar(250))
returns varchar(250)
deterministic
begin
declare valueLength int;
declare l int;
set valueLength = char_length(value);
set value = upper(value);
set l = 0;
while (l < valueLength ) do
if (mid(value,l ,1) = ' ' or l = 0) then
if (l < valueLength ) then
set value= concat(
left(value,l),
lower(mid(value,l+ 1,1)),
right(value,valueLength - l - 1)
);
end if;
end if;
set l = l + 1;
end while;
return value;
end;
//
Query OK, 0 rows affected (0.17 sec)
mysql> delimiter ;
関数のロジックのポイント
- delimiter //:ストアドファンクション内のセミコロンが文の区切りとして誤認識されないよう、一時的にデリミタを変更しています。
- deterministic:同じ入力に対して常に同じ結果を返すことを宣言する指定です。
- upper(value):まず文字列全体を大文字に変換し、その後で単語の先頭だけを小文字に置き換えていきます。
- whileループ:文字列を1文字ずつ走査し、スペースの直後または文字列の先頭にある文字を
lower()で小文字化します。
関数の呼び出し方法
作成した関数は、SELECT文を使って次のように呼び出すことができます。
mysql> select convertFirstLetterToLowerAndRemainingToCapital('Introduction To MySQL');
実行すると、以下のような結果が出力されます。
+-------------------------------------------------------------------------+
| convertFirstLetterToLowerAndRemainingToCapital('Introduction To MySQL') |
+-------------------------------------------------------------------------+
| iNTRODUCTION tO mYSQL |
+-------------------------------------------------------------------------+
1 row in set, 2 warnings (0.04 sec)
ご覧のとおり、「Introduction To MySQL」という入力に対して、各単語の先頭文字が小文字になり、残りの文字が大文字に変換された「iNTRODUCTION tO mYSQL」が出力されています。これにより、INITCAP()関数とは正反対の動作を実現できました。同様の手法を応用すれば、さまざまな文字列変換処理をMySQL内で柔軟に実装できます。
-
MySQLでテーブルの日付レコードを変更する方法|UPDATEとDATE_ADD()の使い方
MySQLで保存済みの日付データに年数を加算して変更したい場合、UPDATEコマンドとDATE_ADD()関数を組み合わせることで簡単に実現できます。ここでは、実際のSQLクエリ例を使いながら、日付レコードを変更する手順を順番に解説します。1. テーブルを作成するまず、日付型(date)のカラムを持つテーブルを作成します。mysql> create table DemoTable1984 ( ShippingDate date ); Query OK, 0 rows affected (0.00 sec)2. レコードを挿入する次に、INSERTコマンドを使ってテ
-
MySQLで特定の値だけを検索結果の最後に並び替える方法
MySQLで特定の値を最後に並び替える方法 データベースを扱っていると、「不明」や「未設定」を意味する特定の値だけを、検索結果の一番最後に表示したいケースがあります。MySQLでは、ORDER BY句に比較式を組み合わせることで、このような並べ替えを簡単に実現できます。ここでは、テーブル作成から動作確認まで、サンプルコードとともに手順を解説します。 ステップ1:サンプルテーブルを作成する まず、氏名データを格納するためのテーブルを作成します。 mysql> create table demo57-> (-> id int not null auto_increment pr