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

MySQLでLENGTH()とCASE文を使ってテキストを切り詰める方法

MySQLでテキストを切り詰めて表示するには?

MySQLでは、LENGTH()関数CASE文を組み合わせることで、文字列の長さに応じてテキストを切り詰めて表示できます。例えば、文字数が7文字より長い場合は先頭7文字だけを取り出して任意の文字列を連結し、7文字以下の場合はそのまま元の値を出力する、といった処理が可能です。

テーブルの作成

まず、動作を確認するためのテーブルを作成しましょう。テーブル作成のクエリは以下の通りです。

mysql> create table TruncateText
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Number longtext,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.66 sec)

レコードの挿入

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

mysql> insert into TruncateText(Number) values('64575868667687');
Query OK, 1 row affected (0.11 sec)
mysql> insert into TruncateText(Number) values('7654332');
Query OK, 1 row affected (0.17 sec)
mysql> insert into TruncateText(Number) values('25434656');
Query OK, 1 row affected (0.19 sec)
mysql> insert into TruncateText(Number) values('6457586');
Query OK, 1 row affected (0.17 sec)
mysql> insert into TruncateText(Number) values('958567686868675757574');
Query OK, 1 row affected (0.13 sec)
mysql> insert into TruncateText(Number) values('374785868968787');
Query OK, 1 row affected (0.21 sec)
mysql> insert into TruncateText(Number) values('58969678685858585858585858585');
Query OK, 1 row affected (0.14 sec)

登録データの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from TruncateText;

実行結果は以下のようになります。

+----+-------------------------------+
| Id | Number |
+----+-------------------------------+
| 1 | 64575868667687 |
| 2 | 7654332 |
| 3 | 25434656 |
| 4 | 6457586 |
| 5 | 958567686868675757574 |
| 6 | 374785868968787 |
| 7 | 58969678685858585858585858585 |
+----+-------------------------------+
7 rows in set (0.00 sec)

上記の出力を見ると、7文字より長い数字がいくつか含まれていることがわかります。今回の要件では、長さが7文字を超える場合は7桁目以降を切り捨てて指定の数値を付加し、7文字以下の場合はそのまま出力します。

LENGTH()とCASE文で切り詰め処理を実行

実際のクエリは以下の通りです。

mysql> SELECT *, CASE WHEN LENGTH(Number) > 7
-> THEN CONCAT(SUBSTRING(Number, 1, 7), '99999999')
-> ELSE Number END AS AddNumber
-> FROM TruncateText;

実行結果:

+----+-------------------------------+-----------------+
| Id | Number | AddNumber |
+----+-------------------------------+-----------------+
| 1 | 64575868667687 | 645758699999999 |
| 2 | 7654332 | 7654332 |
| 3 | 25434656 | 254346599999999 |
| 4 | 6457586 | 6457586 |
| 5 | 958567686868675757574 | 958567699999999 |
| 6 | 374785868968787 | 374785899999999 |
| 7 | 58969678685858585858585858585 | 589696799999999 |
+----+-------------------------------+-----------------+
7 rows in set (0.00 sec)

処理内容の解説

上記の出力結果をご覧ください。文字数が7文字を超えているレコードについては、SUBSTRING()で先頭7文字のみを抽出し、その後ろに「99999999」という数値をCONCAT()で連結しています。一方、7文字以下のレコード(Id: 2と4)は、ELSE句によって元の値がそのまま出力されています。

このように、LENGTH()で文字数を判定し、CASE文で条件分岐を行うことで、柔軟なテキストの切り詰め処理をSQLだけで実現できます。表示文字数を制限したい一覧画面などで活用できる便利なテクニックなので、ぜひ覚えておきましょう。

  1. JavaでMySQLテーブルのカラム数を取得・カウントする方法

    MySQLテーブルのカラム(列)数をJavaで取得するには、ResultSetMetaDataインターフェースを使用します。ResultSetMetaDataを活用すれば、カラムの総数だけでなく、各カラムの名前やデータ型といった詳細情報も簡単に取得できます。前提:サンプルテーブルの作成まずは動作確認用のテーブルを作成しましょう。以下のSQLでは、3つのカラムを持つ「DemoTable」を作成しています。mysql> create table DemoTable     -> (     -> St

  2. MySQLで特定の項目ごとの件数を取得する方法(COUNTとGROUP BYの使い方)

    MySQLでリスト内の特定の項目がそれぞれ何件ずつ存在するかを調べたい場合は、COUNT()関数とGROUP BY句を組み合わせるのが基本です。この記事では、実際にサンプルテーブルを作成し、特定の条件に一致する項目ごとの出現回数を集計する手順をわかりやすく解説します。 1. サンプルテーブルを作成する まずは、名前を格納するシンプルなテーブルを作成します。 mysql> create table DemoTable1854     (     Name varchar(20)   &nb