MySQLテーブル内の大文字の文字列をすべて検索する方法を解説
MySQLテーブル内に格納されている大文字のみの文字列をすべて抽出したい場合は、BINARY UPPER()関数を活用します。通常の比較では大文字と小文字が区別されないため、BINARY演算子を組み合わせることで、大文字・小文字を厳密に判定できるようになります。
基本の構文
SELECT * FROM yourTableName WHERE yourColumnName = BINARY UPPER(yourColumnName);
この構文の仕組みはシンプルです。UPPER()関数は文字列をすべて大文字に変換しますが、BINARY演算子を付けることで比較がバイナリ(大文字小文字を区別する)モードになります。その結果、「元の文字列がすでにすべて大文字である場合のみ」条件に一致するという仕組みです。
サンプルテーブルの作成
実際に動作を確認するために、まずテーブルを作成しましょう。テーブル作成用のクエリは以下の通りです。
mysql> create table FindUpperCaseDemo
-> (
-> Id int,
-> FirstName varchar(20),
-> Age int
-> );
Query OK, 0 rows affected (1.04 sec)テストデータの挿入
次に、INSERTコマンドを使ってサンプルレコードを挿入します。大文字・小文字が混在したデータを意図的に登録しています。
mysql> insert into FindUpperCaseDemo values(1,'John',23); Query OK, 1 row affected (0.17 sec) mysql> insert into FindUpperCaseDemo values(2,'CAROL',21); Query OK, 1 row affected (0.29 sec) mysql> insert into FindUpperCaseDemo values(3,'JoHN',23); Query OK, 1 row affected (0.11 sec) mysql> insert into FindUpperCaseDemo values(4,'JOHN',26); Query OK, 1 row affected (0.22 sec) mysql> insert into FindUpperCaseDemo values(5,'sAM',26); Query OK, 1 row affected (0.18 sec) mysql> insert into FindUpperCaseDemo values(6,'SAM',28); Query OK, 1 row affected (0.18 sec) mysql> insert into FindUpperCaseDemo values(7,'MIKE',29); Query OK, 1 row affected (0.17 sec) mysql> insert into FindUpperCaseDemo values(8,'BOB',20); Query OK, 1 row affected (0.45 sec) mysql> insert into FindUpperCaseDemo values(9,'LARRY',22); Query OK, 1 row affected (0.39 sec) mysql> insert into FindUpperCaseDemo values(10,'LARRy',22); Query OK, 1 row affected (0.14 sec)
登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from FindUpperCaseDemo;
実行結果は以下の通りです。
+------+-----------+------+ | Id | FirstName | Age | +------+-----------+------+ | 1 | John | 23 | | 2 | CAROL | 21 | | 3 | JoHN | 23 | | 4 | JOHN | 26 | | 5 | sAM | 26 | | 6 | SAM | 28 | | 7 | MIKE | 29 | | 8 | BOB | 20 | | 9 | LARRY | 22 | | 10 | LARRy | 22 | +------+-----------+------+ 10 rows in set (0.00 sec)
大文字の文字列のみを抽出するクエリ
それでは、FirstNameカラムから大文字のみの文字列を抽出するクエリを実行します。
mysql> select *from FindUpperCaseDemo where FirstName=BINARY UPPER(FirstName);
実行結果は以下の通りです。
+------+-----------+------+ | Id | FirstName | Age | +------+-----------+------+ | 2 | CAROL | 21 | | 4 | JOHN | 26 | | 6 | SAM | 28 | | 7 | MIKE | 29 | | 8 | BOB | 20 | | 9 | LARRY | 22 | +------+-----------+------+ 6 rows in set (0.09 sec)
結果のポイント
出力結果を見ると、「CAROL」「JOHN」「SAM」「MIKE」「BOB」「LARRY」という、すべての文字が大文字で構成されているレコードのみが抽出されていることがわかります。一方、「John」「JoHN」「sAM」「LARRy」のように大文字と小文字が混在するレコードは除外されています。
なお、BINARY演算子を付けずに単純に「FirstName = UPPER(FirstName)」と記述した場合、MySQLのデフォルトの照合順序では大文字と小文字が同一視されるため、すべてのレコードが一致してしまいます。大文字のみを正確に判定したい場合は、必ずBINARYを組み合わせるようにしましょう。
-
MySQLテーブルを一括更新する方法|ADDTIME関数で複数行の時刻データをまとめて変更
MySQLでは、UPDATE文と関数を組み合わせることで、テーブル内の複数のレコードを一度に一括更新(バッチ更新)できます。本記事では、時刻型(TIME型)のカラムに対してADDTIME関数を使い、すべての行の時刻をまとめて加算・更新する手順を、実際のSQL文と実行結果付きでわかりやすく解説します。1. サンプルテーブルを作成するまず、時刻データを格納するためのテーブル「DemoTable」を作成します。mysql> create table DemoTable -> ( -> Bre
-
MySQLでテーブルが存在するかどうかを確認する方法【INFORMATION_SCHEMA.TABLES活用】
MySQLでテーブルの存在を確認するにはMySQLにおいて、特定のテーブルがデータベース内に存在するかどうかを確認したい場合、INFORMATION_SCHEMA.TABLES を利用するのが一般的な方法です。このシステムビューには、サーバー上のすべてのデータベースとテーブルに関するメタデータが格納されており、これを参照することで目的のテーブルが存在するかを簡単に調べられます。基本構文テーブルの存在確認は、以下のようなSELECT文で行います。select table_name from information_schema.tables where table_schema=database