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

MySQLで区切り文字とその後の数字を削除し、現在の値の部分文字列で値を更新する方法

MySQLで区切り文字以降の数字を削除して値を更新する方法

ここでは、「文字列/数字」という形式(例:John/56989)の文字列がカラムに格納されている場合を想定します。区切り文字「/」の後ろにある数字を削除したい場合は、SUBSTRING_INDEX() 関数を使用します。実際の手順を順番に見ていきましょう。

まず、テーブルを作成します。

mysql> create table DemoTable
(
    StudentName varchar(100)
);
Query OK, 0 rows affected (1.05 sec)

続いて、insertコマンドでいくつかのレコードを挿入します。あえて区切り文字を含まない値も混ぜておきます。

mysql> insert into DemoTable values('John/56989');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('Carol');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values('David/74674');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('Bob/45565');
Query OK, 1 row affected (0.09 sec)

select文でテーブル内のすべてのレコードを表示します。

mysql> select *from DemoTable;

実行すると、以下の出力が得られます。

+-------------+
| StudentName |
+-------------+
| John/56989  |
| Carol       |
| David/74674 |
| Bob/45565   |
+-------------+
4 rows in set (0.00 sec)

現在の値の部分文字列で値を更新するクエリ

区切り文字より前の部分だけを取り出して値を更新するには、次のようにUPDATE文とSUBSTRING_INDEX()を組み合わせます。

mysql> update DemoTable set StudentName=substring_index(StudentName,'/',1);
Query OK, 3 rows affected (0.13 sec)
Rows matched :4 Changed :3 Warnings :0

SUBSTRING_INDEX() の第3引数に「1」を指定することで、区切り文字「/」より前側の最初の部分(ここでは名前のみ)を取得できます。そのため、区切り文字を含まない「Carol」は変更対象にならず、元の値のまま維持されます。「Changed :3」と表示されているのはこのためです。

テーブルのレコードをもう一度確認してみましょう。

mysql> select *from DemoTable;

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

+-------------+
| StudentName |
+-------------+
| John        |
| Carol       |
| David       |
| Bob         |
+-------------+
4 rows in set (0.00 sec)

補足:SUBSTRING_INDEX()の応用

SUBSTRING_INDEX() の第3引数に負の値(例:-1)を指定すると、逆に区切り文字より後ろ側の部分を取得できます。また、区切り文字が文字列中に存在しない場合は、文字列全体がそのまま返されるため、上記のように混合データが含まれるテーブルでも安全に処理できるのが便利なポイントです。

このように、UPDATE文とSUBSTRING_INDEX()を組み合わせれば、区切り文字とその後の数字を一括で削除し、必要な部分文字列だけでデータを整理できます。

  1. MySQLでNULLのフィールドを特定の値に一括更新する方法(IS NULL句の使い方)

    はじめに MySQLでは、IS NULL演算子とUPDATE文を組み合わせることで、NULLになっているフィールドだけを特定の値で効率的に更新できます。NULLは「=」や「!=」では比較できないため、必ずIS NULLを使う点がポイントです。 この記事では、実際のサンプルコードを使いながら、NULLのレコードだけを別の値で更新する手順をわかりやすく解説します。 1. テーブルを作成する まず、テスト用のテーブルを作成しましょう。ここでは学生のスコアを格納する StudentScore カラムを持つテーブルを作成します。 mysql> create table DemoTable (

  2. MySQLで現在の日付より前の日付データを抽出する方法

    MySQLでは、NOW() 関数と比較演算子を使うことで、現在の日時より前の日付を持つレコードを簡単に抽出できます。この記事では、実際にテーブルを作成し、サンプルデータを登録したうえで、現在日時より過去の日付レコードを取得する手順を解説します。 1. サンプルテーブルの作成 まず、日付型(DATETIME)のカラムを持つテーブルを作成しましょう。 mysql> create table DemoTable1877 ( DueDate datetime ); Query OK, 0 rows affected (0.00 sec) 2. テストデータの挿入 次に、IN