Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Microsoft 365)
SQLの文字列の比較モードについて
投稿日時: 25/01/08 11:25:42
投稿者: たらのり

こんにちは
 
SQL で文字列フィールドを GROUP BY すると、大文字と小文字、
全角と半角が同一視され、あたかも Option Compare Text の
状態で文字列を比較(グループ化)したような結果となりました。
 
今回においては望ましい結果でしたが、この比較モードは
どこかで設定され、それに依存するものでしょうか。
それとも既定でそうなっているのでしょうか。
 
同一視しないためには

   StrConv([項目名], vbUnicode)
   StrConv([項目名], vbFromUnicode)
などが有効だと別のサイトにありました
 
 

回答
投稿日時: 25/01/08 17:10:15
投稿者: sk

引用:
SQLの文字列の比較モード

Access データベースに関しては、データベースファイルごとに
設定された並び順序(照合順序)によって決定されます。
 
データベースの並び順序は基本的に、そのデータベースが新規作成された時点における
Access アプリケーションの[新規データベースの並び順序]オプションの設定値によって
決定されます。
 
もし作成済みのデータベースファイルの並び順序を別のものに変更したい場合は、
Access アプリケーションの[新規データベースの並び順序]オプションを
任意の並び順序に変更してから、そのデータベースの最適化/修復を
実行すればよいでしょう。
 
引用:
文字列フィールドを GROUP BY すると、大文字と小文字、
全角と半角が同一視され、あたかも Option Compare Text の
状態で文字列を比較(グループ化)したような結果となりました。

・半角英字と全角英字および英大文字と英小文字は区別されない。
 
・半角数字と全角数字は区別されない。
 
・全角ひらがな、全角カタカナ、半角カタカナは区別されない。
 (濁音、半濁音を含む)
 
(少なくとも現存するバージョンの)Access において選択可能な
日本語系の並び順序については、テキスト型のフィールドに格納された
文字列の比較/グループ化/並べ替えにおいて概ね上記の規則が適用されます。
SQL Server の照合順序のような細かいレベルでの設定は無理です。

投稿日時: 25/01/08 23:00:55
投稿者: たらのり

こんばんは
 
skさま、たいへん有意義なコメントをありがとうございます!!
いまは手元に Accessがありませんので、あす以降に確認いたします。
 
取り急ぎお礼までに m(_ _)m
 
 

投稿日時: 25/01/09 22:20:20
投稿者: たらのり

こんにちは
 
新規データベースの並び順について確認しました。
 
日本語に関しては次の 4種類の設定があり、それぞれの設定で新規に
データベースを作成して CurrentDb.CollatingOrder の値を表示し:
 

  新規データベースの並び順        値   16進数
  -------------------------- ------- --------
  日本語                        1041    0x411
  日本語 - レガシー             1041    0x411
  日本語、部首、画数          263185  0x40411
  日本語 Unicode - レガシー    66577  0x10411

skさんのおっしゃるとおり、これらのルールがデータベースファイル
ごとに保存されることを確認しました。
 
またグループ化(GROUP BY)では、ご指摘のとおり、いずれのモードでも
・大文字 と 小文字
・全角 と 半角
・ひらがな と カタカナ
を同一視していることを確認しました。
 
今回はたまたま結果が望んだものでしたが、日本語系のルールが適用
される限り、たとえ他の環境で最適化されたとしても問題なくグループ化
されそうなことが分かりよかったです(グループ化されていれば文字列の
並び順は割とどうでもよい問題でしたので)。
 
また、同一視したくない場合の対処法も立てやすくなりました
(そんな機会に当たるかは分かりませんが)。
 
skさま
とても的確なアドバイスをいただき、ありがとうございました。