SQLのデータに半角スペースが含まれるデータを探す方法
Yahooの知恵袋に質問を回答しました。ブログで詳しく解説しようと思います。
知恵袋:https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10206429520?__ysp=U1FM
質問内容
sql初心者です。
全レコードを検索し、文字列の最後にスペースが含まれるカラムを抽出する方法を教えてください。よろしくお願いします。
質問者のやりたいこと
なぜ、空白の入ったカラムを探す必要があるのか?
恐らく、データの整備を行いたいのだと思います。
意図せず、半角スペースのデータが登録されていた場合、プログラムで操作する時にバグの要因となります。
普通は登録I/Fまたはプログラムがデータを参照するときに、半角スペースは除外またはトリミング(トリム)します。
よほどへっぽこでない限り半角スペースが入っていたからと言って慌てる事態にはなりません。
※トリミング = IT業界では、半角スペースを排除したり、一定の長さでデータを区切ることを言います。
半角スペースがあることの影響
例えば、氏名 MIYA さんを検索する時に
SELECT * FROM WHERE NAME = 'MIYA'
で検索した時に
実データの末尾に空白があると検索結果に 'MIYA 'のレコードがHITしません。
調べ方
以下、LIKE句を利用して、該当データを探すことができます。
SELECT * FROM テーブル名 WHERE カラム名 LIKE '% ' ;
複数のカラムを調べたい場合は OR を利用しましょう。
ただし、インデックスが張られていない属性に対して OR で繋げるとデータベースに負荷が掛かるため注意が必要です。
SELECT * FROM テーブル名 WHERE (カラム名A LIKE '% ' OR カラム名B LIKE '% ' ) ;
応用(ワイルドカード)
SQLのLIKE句はワイルドカードを使います。
ワイルドカード文字 | 意味 |
% | 任意の長さ(ゼロを含む)の文字列 |
_ | [crayon-66286782aac63559463271/] |
実際のSQL文の使い方と、検索結果の例は以下の通り。
// 宮藤から始まるレコードがヒット(例:宮藤次郎)
SELECT * FROM テーブル名 WHERE name LIKE '宮藤%'
// 宮藤で終わるレコードがヒット(例:あの宮藤)
SELECT * FROM テーブル名 WHERE name LIKE '%宮藤'
// 宮藤〇のレコードがヒット(例:宮藤A)
SELECT * FROM テーブル名 WHERE name LIKE '宮藤_'
[crayon-66286782aac6f873608209/]
試してみよう
SQL Fiddle というサービスが便利です。先ほど説明した内容をSQL Fiddleで検証済みです!
無料かつ、会員登録が不要です。アクセスするだけで、ブラウザ上でSQLの実行が可能です。
このサービスの素晴らしいところは複数のデータベースを用意してくれていることです。
以下のデータベースが用意されており、バージョンの新しいものが用意されています。
- MySQL
- Oracle
- PostgresSQL
- SQLite(WebSQL)
- MS SQL Server
データベースの業界も近年、クラウドサービスにより変化の年を迎えておりますね。
データベースが不要なシステムも増えてきました。しかし、需要はまだまだあります。