「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:2661
現在:3


クエリーの検索が厳密過ぎる

ページOpenOffice.org FAQの登録ページ
投稿者匿名
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2009-08-17 17:08:31 (月)
OSWindows XP
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

クエリーで全て半角英字の大文字で入力しているものをパラメータクエリーで検索するときに小文字で入力してしまうと検索に引っ掛かってくれません。

Accessでは問題なく検索されていたので使い勝手が悪く思います。 もう少し柔軟な検索が出来る方法があれば教えていただきたいです。

よろしくお願いします。


データベースの仕様ですね

M.Kamataki (2009-08-17 21:36:22 (月))

Accessでは、英字は大文字・小文字・全角・半角を区別しません。また、全角ひらがな・全角カタカナ・半角カタカナも区別しないようです。これは、mdbというファイル形式のデータベースの仕様です。クエリーの仕様ではありません。たぶんAccessで他のデータベース、たとえばPostgreSQLに接続してクエリーで検索してみると、後述するように全然異なる結果になるはずです。

一方、Baseが標準で利用するデータベースはHSQLDB(http://hsqldb.org/)です。このHSQLDBを使う限り、英字の大文字・小文字を区別します。これはHSQLDBというデータベースの仕様です(回避方法がありました)。したがって厳密なのはクエリーではなくデータベースです。

>もう少し柔軟な検索が出来る方法があれば教えていただきたいです。

このご質問に対しては、HSQLDB以外のデータベース、たとえばmdb形式のものを接続してお使いください、というのが回答になります。(HSQLDBでも可能)

タイトルを変えて、mdb、MySQL、PsotgreSQLの検索結果を紹介しますので、目的にあったデータベースを選んでください。

p.s. ()内は、「HSQLDBでの可能性」の記述に合わせて追記。

mdbの場合

M.Kamataki (2009-08-17 21:55:31 (月))

BaseでAccessのmdb形式のデータベースに接続し、以下のテーブルを作成しました。

faq4_1832_1.jpg

以下のようにクエリーの検索は、英字の大文字・小文字・全角・半角を区別しません。ついでに全角ひらがな・全角カタカナ・半角カタカナも区別しません。 :p このようにゆるいデータベースを使えば、ご希望のことが実現します。Microsoft系のSQL Serverでも英字の大文字・小文字は区別しないみたいですね。

faq4_1832_2.jpg

MySQLの場合

M.Kamataki (2009-08-17 22:02:51 (月))

mdbと同じ内容のテーブルで以下のようにクエリーで検索すると、MySQLでは、英字の大文字・小文字は区別されません。

faq4_1832_3.jpg

PostgreSQLの場合

M.Kamataki (2009-08-17 22:05:25 (月))

mdbと同じ内容のテーブルで以下のようにクエリーで検索すると、PostgreSQLでは、HSQLDBと同じ結果になりました。

faq4_1832_4.jpg

英字の大文字・小文字を区別したい場合

M.Kamataki (2009-08-17 22:10:00 (月))

データベースでは、英字の大文字・小文字を区別したい場合もあります。以下にそんなケースへの対応が紹介されていました。

データベースで大文字と小文字の区別に注意を
http://nosa.cocolog-nifty.com/sanonosa/2007/05/post_c5dc.html

HSQLDBでの可能性

M.Kamataki (2009-08-17 22:45:07 (月))

と、ここまで書いて、HSQLDBで完全に不可能か確認していないことに気づきました。上記データベースでは、ある程度英字の大文字・小文字対策がありましたし。。。

そこで、http://hsqldb.org/ を調べるとなんとなくそれらしい説明が以下にありました。

http://hsqldb.org/doc/guide/ch09.html#set_ignorecase-section

どうやら、テーブルを作成する際に、「テキスト[VARCHAR_IGNORECASE]」をフィールドに設定すると、英字の大文字・小文字を区別しなくなるようです。試してみると、パラメータクエリーで「Abc123」で、「ABC123」も「abc123」も検索できましたねぇ。 :D

ただ、COUNT関数は区別するようです。

ページ番号を変えました

M.Kamataki (2009-08-19 15:22:03 (水))

faq/5/5にページ番号を変更しました。faq/5/3をご覧ください。

ありがとうございます

匿名 (2009-08-19 19:03:19 (水))

テキスト[VARCHAR_IGNORECASE]に設定することで望んだとおりの結果が出ました。
ありがとうございます。

完了にします

M.Kamataki (2009-08-20 06:48:42 (木))

コメントありがとうございます。

お名前:
題名:


添付ファイル: filefaq4_1832_4.jpg 458件 [詳細] filefaq4_1832_3.jpg 473件 [詳細] filefaq4_1832_2.jpg 483件 [詳細] filefaq4_1832_1.jpg 479件 [詳細]