Microsoft Access 掲示板

クエリの抽出条件で環境依存の丸数字(㉑~㊿)を含む曖昧検索ができない

11 コメント
views
4 フォロー

Win10Pro Office2016Pro(VL)

テーブルの品名フィールドには以下の内容が保存されています。

基本セット➀



基本セット㊿

【抽出できる:丸数字の1~20】
例)Like "*➀"

【抽出できない:丸数字の21~50】
例)Like "*㉑"

抽出できるようにするにはどのようにすればできますでしょうか?

宜しくお願い致しますm(__)m

こじゅわい
作成: 2022/11/09 (水) 13:25:17
通報 ...
1

当方の環境でもうまくいきませんでした。
丸数字の21~50はUnicode文字なので、それが影響しているのかも。
Accessのバグといえるでしょう。
Like演算子はテキストモードでの比較になりますのでそれが原因のようですので、バイナリモードでの比較だとうまくいきました。
下記でバイナリモードでの比較の方法を紹介してますので参考にしてください。

【Access】クエリで大文字/小文字、全角/半角、ひらがな/カタカナを区別して文字列比較したい | hatena chips
Accessのクエリ(SQL)の抽出条件や、演算フィールドの式で文字列比較をするとき、テキストモードでの比較になるので、 大文字/小文字、全角/半角、ひらがな/カタカナを区別しま...
hatena chips

2
名前なし 2022/11/10 (木) 17:06:47 ec010@eef0b

そのデータベースの並び順序(照合順序)が「日本語 - レガシー」だからではないかと。
その場合、恐らく㉑から㊿までの丸数字はソートテーブルにおいて重みづけされていないがために無視されてしまっているはず。

3

ハンドルネーム入力するの忘れてました。失礼。

4
こじゅわい 2022/11/10 (木) 17:49:05 f4ccb@3e38e

お忙しいところご回答ありがとうございます。

オプションを確認したところ「日本語 - レガシー」でした。
今まで気にした事もなかったのですが、他の選択肢
「日本語」
「日本語、部首、画数」
「日本語 Unicode - レガシー」
どれもうまくいきませんでしたので「日本語 - レガシー」に戻しました。

バイナリーモードの比較で丸数字の21番が6で返って来ました。
流石です。助かりました。

感謝!

5

Accessのオプションで設定できるのは「新規データベースの並び順序」です。
既存のデータベースに関しては、その設定を行なってからそのデータベースの最適化/修復を実行しなければ適用されません。

6
こじゅわい 2022/11/10 (木) 20:36:37 350e2@3e38e

お忙しいところご回答ありがとうございます。

最適化したらできました。
「日本語」
「日本語、部首、画数」
上記二つとも問題ありませんでした。
流石です。

その前にバイナリでの比較をテストしてみたのですが・・・
IIf(IsNull([forms]![テスト]![文字列検索])=False,InStr(1,[テスト].[品名],[forms]![テスト]![文字列検索],0),1)

>0
抽出できるのですが、弊害として「カタカナ」を「ひらがな」で検索できなくなり(当然ですよね)
また、ソート順もstrconvの64でやってみてもやっぱり少し変で・・・

と言うことで「日本語」で「最適化」で進めてみます。

感謝!

7

と言うことで「日本語」で「最適化」で進めてみます。

その場合は次の点に留意されることをお奨めします。

・Access の[新規データベースの並び順序]オプションの設定値は環境ごとに異なる。
 したがって、そのデータベースを複数のPC/ユーザー間で共有する場合、
 それぞれの環境のオプション設定の違いにより、そのデータベースの
 最適化/修復が他の環境で実行された際にそのデータベースの並び順序が
 変更される可能性がある。

・そのデータベースの並び順序が「日本語」である場合、
 半角/全角のアラビア数字(0~9,0~9)、丸数字(⓪~⑨)、
 二重丸数字(⓵~⓽)について、同じ数を表す文字は区別されない。
 例えば Like "*➀" という条件で文字列比較を行なった場合、
 "基本セット➀"だけでなく"基本セット1"や"基本セット1"とも後方一致する。

後者の仕様がメリット/デメリットのどちらとして働くかは、
それぞれの要求仕様や運用方針によって評価が異なってくるでしょう。

以上の点を踏まえた上で、どの並び順序を適用すべきかについて
検討してみて下さい。

8
こじゅわい 2022/11/11 (金) 14:18:29 350e2@3e38e

留意点を踏まえて勉強しながら検討してみます。
とても親切にご教授頂きありがとうございます。

続けでまた壁に当たりました・・・
今回はバックエンドが Azure の SQLデータベース なのですが、同様に丸数字(㉑~)が抽出できません。

どなたかヒントをお願いします。m(__)m

10

ODBCリンクテーブルのフィールドの値に対して文字列比較を行う際の
照合順序(並び順序)はバックエンド側で適用されているものに準拠しますので、
まずはリンク先である Azure SQL データベースの設定を確認して下さい。
恐らく Japanese90 や Japanese_ などの古い照合順序が適用されているのではないかと。

9
りんご 2022/11/11 (金) 14:27:42 c564b@0e907

 七転八倒して抽出出来るようになったとしても、負の遺産化するだけで意味がない。丸数字を止めれば済む話ではないでしょうか。

11
こじゅわい 2022/11/11 (金) 15:34:50 350e2@3e38e

お忙しいところご教授ありがとうございます。

そうなんです。その通りなんです。
でも、壁はとりあえず乗り越えたいので・・・

ご指摘の通り照合順序を明示的に付加したところ意図する結果が得られました。
流石です。

COLLATE Japanese_XJIS_100_CI_AS Like N'%㉑%'
COLLATE Japanese_Bushu_Kakusu_100_CI_AS Like N'%㉑%'

感謝!