MySQLで大文字と小文字を区別した文字列比較を実行する方法
ご存じのとおり、MySQLは文字列を比較する際、デフォルトでは大文字と小文字を区別しません。しかし、この挙動は変更可能です。式の前にBINARYキーワードを付けることで、MySQLに大文字と小文字を区別した文字列比較を実行させることができます。
BINARYキーワードの仕組み
実際、BINARYキーワードは、MySQLに対して「文字列内の文字を単なるアルファベットとしてではなく、その基となるASCII値(バイナリ値)に基づいて比較せよ」と指示します。これにより、「Gaurav」と「gaurav」のように大文字・小文字だけが異なる文字列を、厳密に区別して扱えるようになります。
サンプルデータ:Employeeテーブル
以下のデータを持つ「Employee」テーブルを例に説明します。
mysql> Select * from Employee; +----+--------+--------+ | ID | Name | Salary | +----+--------+--------+ | 1 | Gaurav | 50000 | | 2 | Rahul | 20000 | | 3 | Advik | 25000 | | 4 | Aarav | 65000 | | 5 | Ram | 20000 | | 6 | Mohan | 30000 | | 7 | Aryan | NULL | | 8 | Vinay | NULL | +----+--------+--------+ 8 rows in set (0.09 sec)
BINARYキーワードを使ったクエリ例
次のクエリでは、BINARYキーワードを使用することで、MySQLに大文字と小文字を区別した文字列比較を強制的に行わせています。
mysql> Select * from Employee WHERE BINARY Name IN ('Gaurav','RAM');
+----+--------+--------+
| ID | Name | Salary |
+----+--------+--------+
| 1 | Gaurav | 50000 |
+----+--------+--------+
1 row in set (0.00 sec)
結果のポイント
結果を見ると、「Gaurav」だけが返され、「RAM」は該当なしとなっています。これは、テーブル内の実際のデータが「Ram」(先頭のみ大文字)であり、すべて大文字の「RAM」とは異なるためです。
通常の比較であれば大文字・小文字の違いは無視されるため、両方ともヒットするはずですが、BINARYキーワードによってASCII値レベルでの厳密な比較が行われるため、「RAM」はマッチしなかったのです。このように、BINARYキーワードを使えば、MySQLでも簡単にケースセンシティブな文字列検索を実現できます。
-
MySQLで文字列を日時(DATETIME)に変換する方法【STR_TO_DATE活用術】
MySQLでは、STR_TO_DATE()関数とフォーマット指定子を組み合わせることで、VARCHAR型などで文字列として保存されている日付・時刻データを、DATETIME型に変換することができます。 基本構文 フォーマット指定子を使用した基本構文は以下の通りです。 select str_to_date(yourColumnName,%d/%m/%Y %h:%i %p) as anyAliasName from yourTableName; 主なフォーマット指定子の意味 %d:日(2桁) %m:月(2桁) %Y:年(4桁) %h:時(12時間制・2桁) %i:分(2桁) %p:午前/午後
-
MySQLで数値文字列に比較演算子を使用する方法をわかりやすく解説
MySQLで数値文字列を比較するには?MySQLでは、「5-9」や「2-4」のようなハイフン区切りの数値文字列をそのまま比較することはできません。そんなときは、substring()関数とinstr()関数、さらにCASTを組み合わせることで、文字列から数値部分を取り出して比較演算子を使えるようになります。この記事では、実際にテーブルを作成しながら、数値文字列に対して比較演算を行う方法を順番に解説していきます。1. サンプルテーブルを作成するまずは、ユーザーIDと教育期間のギャップ(数値文字列)を格納するテーブルを作成しましょう。mysql> create table DemoTable