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

MySQLで文字列の長さに応じて部分文字列またはカスタムメッセージを表示する方法(SUBSTRINGとCASEの活用)

はじめに

MySQLでは、SUBSTRING()関数とCASE文を組み合わせることで、文字列の長さに応じて異なる値を表示できます。文字列が特定の長さ以下の場合は部分文字列を抽出して表示し、長さを超えている場合は任意のカスタムメッセージを返すことが可能です。

この記事では、具体的なサンプルコードを通じて、その実装方法を順を追って解説します。

サンプルテーブルの作成

まず、従業員名を格納するテーブルを作成します。

mysql> create table DemoTable1402
-> (
-> EmployeeName varchar(40)
-> );
Query OK, 0 rows affected (0.62 sec)

テストデータの挿入

次に、INSERT文を使ってサンプルデータを登録します。

mysql> insert into DemoTable1402 values('Adam Smith');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1402 values('Chris Brown');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1402 values('David Miller');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1402 values('Carol Taylor');
Query OK, 1 row affected (0.10 sec)

登録データの確認

SELECT文ですべてのレコードを表示して確認します。

mysql> select * from DemoTable1402;

実行結果は以下のとおりです。

+--------------+
| EmployeeName |
+--------------+
| Adam Smith |
| Chris Brown |
| David Miller |
| Carol Taylor |
+--------------+
4 rows in set (0.00 sec)

条件付きで部分文字列を表示するクエリ

ここが本題です。文字列の長さが11文字以下の場合は先頭5文字を抽出して表示し、それより長い場合はカスタムメッセージを表示するクエリがこちらです。

mysql> select *, case when char_length(EmployeeName) <=11 then substring(EmployeeName,1,5)
-> else 'EmployeeName is greater than 11'
-> end as Result
-> from DemoTable1402;

実行結果は以下のとおりです。

+--------------+---------------------------------+
| EmployeeName | Result |
+--------------+---------------------------------+
| Adam Smith | Adam |
| Chris Brown | Chris |
| David Miller | EmployeeName is greater than 11 |
| Carol Taylor | EmployeeName is greater than 11 |
+--------------+---------------------------------+
4 rows in set (0.04 sec)

結果を見ると、「Adam Smith」と「Chris Brown」は11文字以下のため先頭5文字(「Adam」「Chris」)が表示され、「David Miller」と「Carol Taylor」は11文字を超えているためカスタムメッセージが表示されていることがわかります。

クエリのポイント解説

  • char_length(EmployeeName):文字列の文字数を取得します。マルチバイト文字(日本語など)も1文字としてカウントされるため、日本語データを扱う場合に便利です。
  • CASE文case when 条件 then 値 else 値 endの形式で条件分岐を行います。ここでは文字数が11以下かどうかを判定しています。
  • substring(EmployeeName, 1, 5):第1引数の文字列に対し、第2引数で指定した開始位置(1文字目)から、第3引数で指定した文字数(5文字)を抽出します。
  • as Result:CASE文の計算結果の列に「Result」という別名を付けて、出力を見やすくしています。

まとめ

MySQLでは、CASE文とCHAR_LENGTH()関数、SUBSTRING()関数を組み合わせることで、文字列の長さに応じた柔軟な表示制御が実現できます。一覧画面で長い文字列を省略して表示したり、閾値を超えたデータに注意メッセージを表示したりするなど、実務のさまざまな場面で応用できるテクニックです。ぜひ活用してみてください。

  1. Pythonで文字の出現頻度が文字列の長さの半分を超えているかどうかを確認する方法

    ここでは、小文字・大文字・数字・特殊文字が混在する文字列 s が与えられたとき、いずれかの文字の出現頻度が文字列全体の長さの半分を超えているかどうかを判定する方法を解説します。たとえば、入力が s = CC*Ca5&CC の場合を考えてみましょう。この文字列の長さは 9 であり、文字 C の出現回数は 5 回です。5 > 9/2 が成り立つため、出力は True になります。解決のアプローチこの問題は、次の手順で解決できます。まず、文字列 s の各文字の出現頻度を格納したマップ(freq)を作成します。freq 内の各文字 ch について以下を繰り返します。ch の出現頻度が l

  2. Pythonで文字列内に複数回出現する長さkの部分文字列の個数をカウントする方法

    文字列 s と整数 k が与えられたとき、s の中に2回以上出現する長さ k の部分文字列がいくつあるかを求める問題を考えてみましょう。 たとえば、入力が s = xxxyyy、k = 2 の場合、出力は 2 になります。これは「xx」と「yy」という2つの部分文字列が、それぞれ複数回出現しているためです。 解決のアプローチ この問題は、以下の手順で解くことができます。 seen := 空のリストを用意する i を 0 から (s の長さ - k) まで繰り返す: t := s のインデックス i から i + k - 1 までの部分文字列 t を seen の末尾に追加する mp :