【MySQL】n 文字以上なら末尾に三点リーダーをつけて省略

 よく次のデモような文字列省略機能を持つ web ページがあります。

text-overflow – CSS: カスケーディングスタイルシート | MDN#elipse
 これは CSS 上で三点リーダーを使って文字列を省略しています。これは箱の端等の適切な位置で省略文字を表記するという点で便利なのですが、状況によってはレスポンスを小さくしたい、メモリの使用量を小さくしたい、といった需要によってサーバアプリケーション側、データベース側で文字列を省略したくなる時もあります。この記事では MySQL で n 文字以上なら末尾に三点リーダーをつけて文字列を省略する方法を紹介します。
 これは次の SQL でできます。

SELECT IF(
               LENGTH(example_str) > 20, # もし 20 文字より文字列長が長いなら
               CONCAT(
                       SUBSTRING(example_str FROM 1 FOR 20), # 1 文字目から 20 文字目まで切り出して
                       '…' # 末尾に三点リーダーを結合して返す
                   ),
               example_str # もし文字列長が 20 文字以下ならそのまま返す
           ) as example_str
FROM example_table;

# example_str
# 寿限無、寿限無、\n五劫の擦り切れ、\n海…

 デモは次です。

 これは MySQL の文字列関数を使っています。それぞれの入力と結果は上記コードのコメントの通りです。
MySQL :: MySQL 8.0 リファレンスマニュアル :: 12.8 文字列関数および演算子#CONCAT
MySQL :: MySQL 8.0 リファレンスマニュアル :: 12.8 文字列関数および演算子#LENGTH
MySQL :: MySQL 8.0 リファレンスマニュアル :: 12.8 文字列関数および演算子#SUBSTRING
 うかつに WHERE の中などで使うとインデックスが使えなくなって処理速度の低下につながる、データベースの先にある PHP 等のプログラム上の方が細やかな制御をしやすいなど、何かと避けられがちな SQL の関数ですが使いどころを限れば案外便利です。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG