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()を組み合わせれば、区切り文字とその後の数字を一括で削除し、必要な部分文字列だけでデータを整理できます。
-
MySQLでNULLのフィールドを特定の値に一括更新する方法(IS NULL句の使い方)
はじめに MySQLでは、IS NULL演算子とUPDATE文を組み合わせることで、NULLになっているフィールドだけを特定の値で効率的に更新できます。NULLは「=」や「!=」では比較できないため、必ずIS NULLを使う点がポイントです。 この記事では、実際のサンプルコードを使いながら、NULLのレコードだけを別の値で更新する手順をわかりやすく解説します。 1. テーブルを作成する まず、テスト用のテーブルを作成しましょう。ここでは学生のスコアを格納する StudentScore カラムを持つテーブルを作成します。 mysql> create table DemoTable (
-
MySQLで現在の日付より前の日付データを抽出する方法
MySQLでは、NOW() 関数と比較演算子を使うことで、現在の日時より前の日付を持つレコードを簡単に抽出できます。この記事では、実際にテーブルを作成し、サンプルデータを登録したうえで、現在日時より過去の日付レコードを取得する手順を解説します。 1. サンプルテーブルの作成 まず、日付型(DATETIME)のカラムを持つテーブルを作成しましょう。 mysql> create table DemoTable1877 ( DueDate datetime ); Query OK, 0 rows affected (0.00 sec) 2. テストデータの挿入 次に、IN