• 締切済み

SQL Serverでの検索時の文字の同一視

SQL Serverでの検索について教えてください。 【目的】 ・JAVAで作成した検索画面より、SQLServerのテーブルに対して検索をしたい。 ・フリガナ検索で、以下のルールを設けたい  (1)カタカナ小文字(『ッ』『ャ』等)とカタカナ大文字(それぞれ、『ツ』『ヤ』)を区別せず、同一視したい  (2)濁音(『バ』)・破裂音(『パ』)・清音(『ハ』)を区別せず、同一視したい  (3)半角スペースと全角スペースを無視したい  (4)アルファベット小文字(『a』等)とアルファベット大文字(『A』)を区別せず、同一視した ≪例≫  Aテーブル/フリガナ : ケンサク キョウダイ  検索ワード    ・ケンサク キョウダイ(完全一致) ・・・ ○   ・ケンサク キヨウダイ(上記(1)) ・・・ ○   ・ケンサク キョウタイ(上記(2)) ・・・ ○   ・ケンサクキョウダイ(上記(3)) ・・・ ○  という結果にしたい。 【現時点】 ・照合順序をSQL文でしようしたら、  (2)は『AI』で対応できました。  (4)は『CI』で対応できました。 ・(3)はSQL文のWhere句に、半角スペースを無効にする『Replace』と全角スペースを無効にする『Replace』を記述することで対応できました。 ・(1)だけがどうしても対応できません。 →(3)の対応と同様に『Replace』での対応も可能なのですが、9つ程度(『ッ』『ャ』『ュ』『ョ』『ァ』『ィ』『ゥ』『ェ』『ォ』)追加しないといけないので、処理速度の低下が懸念点です。 どなたかいい方法をお持ちの方がいましたら、ご協力お願いいたします。 ■バージョン:10.50.1600.1 以上

みんなの回答

  • yorozu_ya
  • ベストアンサー率54% (76/140)
回答No.3

「どうにかしてある項目」をいつ作るかについて。 ORACLEですと関数インデックスを使う場面ですが、 SQLServerでは計算列が使えますね。

  • chie65535
  • ベストアンサー率43% (8525/19380)
回答No.2

元のAテーブルに(1)~(4)の細工を施した「検索用フリガナ」と「元のフリガナ」の2つを持てば良いでしょう。 Aテーブル/元のフリガナ,検索用フリガナ ------------------------------------------ ケンサク キョウタイ,ケンサクキヨウタイ ケンサク キョウダイ,ケンサクキヨウタイ ケンサク シマイ,ケンサクシマイ ケンサク オヤジ,ケンサクオヤシ で、検索文字に対しても(1)~(4)の処理を行ってから、検索用フリガナでWHEREをかけます。 この時、Replaceなどの小細工は一切要りません。「完全一致」で構いません。 上の例で、検索文字に「ケンサ クキョウ ダイ」を指定すると、検索文字に(1)~(4)の変更が加えられ「ケンサクキヨウタイ」で検索しに行きます。 WHERE [Aテーブル].[検索用フリガナ] = 細工した文字列 になっているので、SQL文で出てくるのは Aテーブル/元のフリガナ,検索用フリガナ ------------------------------------------ ケンサク キョウタイ,ケンサクキヨウタイ ケンサク キョウダイ,ケンサクキヨウタイ の2レコードです。 >処理速度の低下が懸念点です。 「検索を行おうとした時にどうにかしようとする」から、処理速度が落ちるのです。 テーブルにレコードを追加する時や、レコードの更新時に「どうにかしてある項目」を作ってしまえば、あとは、「どうにかしてある項目」と「どうにかしてある検索文字」を完全一致で単純検索するだけです。

hokkey
質問者

お礼

chie65535様 ご協力ありがとうございます。 テーブルに検索用フリガナを追加する案も検討していました。 影響範囲が広がるので設定・SQLで対応が出来ない場合の案として考えていましたが、 安心できる案だと再認識しました。 他の案と安心面も念頭に入れて検討してみます。

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

案1 正規表現で検索 LIKE 'ケンサクキ[ヨョ]ウダイ' 案2 独自のストアドファンクションを用意する。 一文字づづ舐めて、(1)~(4)を対応

hokkey
質問者

お礼

toda36様 ご協力ありがとうございました。 案1をSQL上で確認したら、欲しい情報が取得できました。 現時点では、chie65535様の案とtoda36様の案1を検討・検証しています。 お忙しい中、本当にありがとうございます。

関連するQ&A

  • MySQLで半角濁音文字の検索

    宜しくお願い致します。 MySQLのselect検索時にフリーワード検索をしています。 DB上には半角・全角文字が混在しており、検索窓に入力した文字の全角・半角を区別せずに検索しております。 文字コードがUTF-8なので、SQL文のwhere区で「collate utf8_unicode_ci」を指定して全角・半角の区別無しで検索しております。 しかし、半角濁音文字、たとえば「ベルト」や「パワー」等の文字列がDB上に半角カタカナで入っている場合に検索窓に全角で入力しても検索できません。 原因はDB上では半角の「ヘ」と「濁音記号」として認識しており、検索窓に入れた文字列は、そのまま「ベ」という1文字として認識しているので検索できないと思われます。 この問題を解決する方法が無くて悩んでおります。 どなたかご教授の程、宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • あいまい検索で英文字の全角半角を区別しない

    いつもお世話になっております。 あいまい検索で、英文字の全角・半角も区別しないように結果を出したいんですが、どういった方法でできますでしょうか。 大文字小文字の区別なしの曖昧検索だと、 ILIKEという専用演算子を使えばいいとわかったのですが、 全角と半角の区別がついてしまいます。 英文字の全角でも半角でも検索結果をだしたいです。 どなたかご教授お願いいたします。

  • オラクル10gで開発を行っています。文字コードはJA16SJISTIL

    オラクル10gで開発を行っています。文字コードはJA16SJISTILDEです。 現在、テーブルの中には条件なしで様々な文字種類のデータが入っているとします。 全角ひらがな・カタカナ、半角数字・カタカナ、全半角英字・記号等です。 例えば”アイウエオ”を含む文字列を検索するselect文を実行したとき、 以下のようなものがヒットします。 ”アイウエオ” ”アイウエオ” ←半角カタカナ ”あいうえお” ←ヒットしてもしなくてもよい。 例えば”ガギグゲゴ”を含む文字列を検索するselect文を実行したとき、 以下のようなものがヒットします。 ”ガギグゲゴ” ”ガギグゲゴ” ←半角カタカナ ”がぎぐげご” ←ヒットしてもしなくてもよい。 例えば”&”を含む文字列を検索するselect文を実行したとき、 以下のようなものがヒットします。 ”&” ”&”←半角記号 要は、何が言いたいのかいいますと、全角文字の文字列で検索を行ったとき、 全角・半角の区別をしないで検索結果を得るSQL文を考えています。 どのようなSQLにすればよいのかアドバイスをお願いします。 もし、SQL文のみでは実現不可能であれば、●●●といった形で検索結果を 得てそのうち△△△に該当するデータを抽出するといった複数ステップを踏む 方式でも構いません。

  • 文字の判定

     こんばんわ。早速ですが、VBにおいて入力、又は取り込んできたデータの文字(1文字)が全角文字(漢字・ひらがな・全角スペース等)か半角文字(半角カタカナ・半角スペース等)かをみわける関数ってあるのでしょうか?

  • =code(" ") で値が160となる文字をEXCEL VBAで消したい

    EXCEL2002です。 あるセルに半角スペースを入力し、マクロで Cells.Replace Chr(&H20), "" と走らせるときれいに消えてくれます。ちなみにこの半角スペースを=code(" ")で調べると値は32となります。 同じやり方で=code(" ")で調べると160の値となる文字があります。これはスペースのようですが、半角でも全角のスペースでもないようです。 この文字をVBAの上記の方法で消したい場合にCells.Replace Chr(xxxx), "" ←xxxxの部分は何といれたらよいのでしょうか?

  • ワードで数字以外の半角文字を検索し、全角に置換したい

    ワード2003です。 30Pの文書にカタカナの文字が多数あり、半角と全角が入り混じっています。また、数字も、半角で入力されています。 その中から カタカナの半角文字だけを検索し、全角に置換したいのですができますか どなたか教えてください。

  • SQL Server2008 Express の文字列検索について

    SQL Server2008 Express の文字列検索について 検索対象のフィールド内にスペースが入っている場合に  スペースを無視して検索をすることができるでしょうか? 例 検索文字列 山田太郎 検索対象 山田 太郎 or 山田太郎 上記2つのフィールド値を含むレコードが両方表示されるような方法はありますでしょうか。

  • 全角英文字を半角英文字へ一括で直すには

    全角のものを半角に直した場合カタカナまで半角になってしまいます。 カタカナは全角のままでアルファベットのみを一括で半角に直すには どうしたらいいのか教えて下さい。

  • Word2007の全角文字、全角スペースの検索方法

    またまた質問申し訳ありません。 Word2007の書類で、全角文字、全角スペースが混じってて、これらを検索して特定したいのですが、 やり方がいまいちわかりません。 過去の質問から、[!0-9a-zA-Z]を入力すれば半角文字以外を検索できるみたいですが、 半角のスペースやコンマを検索してしまいます。 これらの半角スペースやコンマを検索したくないのですが、検索からはずすにはどうすればよいでしょうか?

  • WORDで全角文字の検索

    半角英文内に残ってしまった全角文字の場所を検索したいのですが方法がわかりません。全角スペース、全角ひらがな、漢字、全角記号などを文書内で検索する方法を知ってる方、教えて下さい。お願いします。