MySQLでスラッシュ区切りの数値文字列をゼロ埋めしてフォーマットする方法
MySQLでは、LPAD関数とSUBSTRING関数を組み合わせることで、「19/5」のようなスラッシュ区切りの数値文字列を「19/0005」のように指定した桁数までゼロ埋めできます。この記事では、その具体的な手順をサンプルコード付きで解説します。
1. テーブルを作成する
まず、サンプル用のテーブルを作成します。
mysql> create table DemoTable1369
-> (
-> BatchId varchar(20)
-> );
Query OK, 0 rows affected (0.46 sec)
2. レコードを挿入する
INSERT文を使って、スラッシュで区切られた数値データを複数件挿入します。
mysql> insert into DemoTable1369 values('19/5');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1369 values('19/78');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1369 values('19/567');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1369 values('19/1234');
Query OK, 1 row affected (0.11 sec)
3. 挿入したデータを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable1369;
実行すると、次のような結果が出力されます。
+---------+ | BatchId | +---------+ | 19/5 | | 19/78 | | 19/567 | | 19/1234 | +---------+ 4 rows in set (0.00 sec)
4. ゼロ埋めフォーマットのクエリを実行する
ここからが本題です。スラッシュより後ろの数値部分を取り出し、LPAD関数で左側をゼロ埋めします。全体の桁数は、最も桁数の大きい値である「1234」に合わせて4桁と設定しています。
mysql> select
-> concat(left(BatchId,3), lpad(substring(BatchId, 4), 4, '0'))
-> from DemoTable1369;
このクエリを実行すると、以下のように整形された結果が得られます。
+--------------------------------------------------------------+ | concat(left(BatchId,3), lpad(substring(BatchId, 4), 4, '0')) | +--------------------------------------------------------------+ | 19/0005 | | 19/0078 | | 19/0567 | | 19/1234 | +--------------------------------------------------------------+ 4 rows in set (0.00 sec)
クエリのポイント解説
- left(BatchId, 3):文字列の先頭3文字(例:「19/」)をそのまま取得します。
- substring(BatchId, 4):4文字目以降、つまりスラッシュの後の数値部分を抽出します。
- lpad(…, 4, '0'):抽出した数値を全体で4桁になるよう、左側を「0」で埋めます。
- concat(…):前半部分とゼロ埋めした数値を結合し、最終的な文字列を生成します。
このようにLPAD関数を活用すれば、バッチ番号や管理番号など、桁数を揃えたい文字列データを簡単に整形できます。必要な桁数は、実際のデータに合わせて適宜変更してください。
-
MySQLでVARCHAR文字列からハイフン以降の数値を削除する方法(SUBSTRING_INDEX活用)
MySQLで「John-232」のようなハイフンを含むVARCHAR型の文字列から、ハイフン以降の数値部分を削除したい場合があります。このような処理には、SUBSTRING_INDEX() 関数を使用すると簡単に実現できます。SUBSTRING_INDEX()関数とはSUBSTRING_INDEX(文字列, 区切り文字, 出現回数) は、指定した区切り文字が現れる位置より前の部分文字列を返す関数です。第3引数に「1」を指定すると、区切り文字が最初に出現する位置より前の文字列だけが取得されます。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create t
-
MySQLで数字を含む文字列を自然な順序で並べ替える方法
MySQLで数字を含む文字列を自然な順序で並べ替える方法MySQLで「2J John has 9」や「2J John has 58」のように数字が混ざった文字列を並べ替えたい場合、単純なORDER BYでは文字列単位で比較されるため、意図したとおりの順序にならないことがあります。このようなときは、REGEXP_REPLACE関数やLENGTH関数をORDER BY句と組み合わせることで、人間にとって自然な順序(自然順ソート)を実現できます。ここでは、実際にテーブルを作成して手順を確認していきましょう。1. サンプルテーブルの作成まず、CREATE TABLE文でテーブルを作成します。mysql