IT技術と資産運用

ITのmiyamon-log

SQLのデータに半角スペースが含まれるデータを探す方法

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 Fiddle

無料かつ、会員登録が不要です。アクセスするだけで、ブラウザ上でSQLの実行が可能です。

このサービスの素晴らしいところは複数のデータベースを用意してくれていることです。

以下のデータベースが用意されており、バージョンの新しいものが用意されています。

  • MySQL
  • Oracle
  • PostgresSQL
  • SQLite(WebSQL)
  • MS SQL Server

データベースの業界も近年、クラウドサービスにより変化の年を迎えておりますね。

データベースが不要なシステムも増えてきました。しかし、需要はまだまだあります。

 

  • B!