LoginSignup
1
2

More than 5 years have passed since last update.

【Access】Accessのクエリで半角・全角・ひらがな・カタカナを区別して抽出する方法

Last updated at Posted at 2018-11-22

記事概要

AccessのクエリでWHERE文を用いる際、意図しないレコードを抽出してしまうことがあります。
それは、半角・全角・ひらがな・カタカナ・大文字・小文字といった文字形式のみ違う場合です。原因はバイナリモードではなく、テキストモードで抽出をかけてしまうからだそうです。

例えば、次のようなテーブルがあったとします。
テーブル名:tbl_Fruit

ID Fruit
1 みかん
2 ミカン
3 ミカン
4 蜜柑
5 MIKAN
6 mikan

この時、Accessで次のクエリ文を流します。

example.sql
SELECT ID, Fruit FROM tbl_Fruit
WHERE Fruit = 'みかん'

すると、次のレコードが抽出されます。

ID Fruit
1 みかん
2 ミカン
3 ミカン

上表の通り、想定した結果「みかん」と違うレコードが抽出されてしまいます!

2 解決方法 strComp関数

解決方法として、strComp関数を用いることで解決できます。
実装では次のようなクエリ文を作成しました。

example.sql
SELECT ID, Fruit FROM tbl_Fruit
WHERE strComp(Fruit,'みかん',0) = 0

strComp関数の補足

strComp関数の引数は次の通りです。

引数項番 引数内容 引数説明
1 string1 string2と比較する文字列。
2 string2 stirng1と比較する文字列。
3 compare 比較形式。省略可能。

比較形式について、値が"0"の時はバイナリモードで比較を行い、値が"1"の時はテキストモードで比較を行います。
今回はバイナリモードで比較を行うため、値を"0"にしています。

strCompの戻り値は次の通りになります。

戻り値 条件
-1 string1 < string2
0 string1 = string2
1 string1 > string2
NULL string1 またはstring2がNull

今回はstring1とstring2がバイナリモードで等しくなる場合のみ抽出したいため、戻り値を"0"と条件づけています。

▼strComp関数の詳細(MSDN)
https://msdn.microsoft.com/ja-jp/library/cc410330.aspx

以上。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2