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


記事概要

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

以上。