- - PR -
LIKEでのあいまい検索
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-01-19 11:03
VB開発にてMS2000のSQLより、データを参照することを行っておりますが、問題にぶつかり、悩んでおります。お忙しい中、申し訳ありませんが、アドバイスをいただけないでしょうか。
SQL:MS(マイクロソフト)SQLServer2000(英語版) 接続方法・・・・・・・・ADO データベースの照合順序・・・SQL_Latin1_General_CP850_BIN ■LIKEがうまく機能しない。 テキストフィールドをKEYとした場合であいまい検索:LIKEで正常にレコードをとって きません。「全」とか「シ」などの全角文字、半角文字が全くダメです。 ■SQL文(CoTB2は変数:テキストが入る) strSQL = "SELECT CSKS.KOSTL,CSKT.KTEXT,CSKT.LTEXT FROM CSKS " _ & "INNER JOIN CSKT ON (CSKS.MANDT = CSKT.MANDT) " _ & "AND (CSKS.KOKRS = CSKT.KOKRS) " _ & "WHERE (CSKS.MANDT = '100') " _ & "AND CSKS.KOKRS BETWEEN '1000' AND '9000' " _ & "AND CSKS.DATBI = 99991231 " _ & "AND CSKT.KTEXT LIKE" & "'%" & CoTB2 & "%'" _ ←ここがうまくいかない。 & "COLLATE Japanese_BIN" _ & " ORDER BY CSKS.KOSTL " ■今までにしてきた対応(どれもうまくできませんでした。) 1.照合順序 →COLLATE Japanese_BIN」や「COLLATE Japanese_CI_AS」を設定 2.サービスパックの適用 →最新番(SP4) 3.「N」を付ける。 →「"'%" & CoTB2 & "%'"」を「"N'%" & CoTB2 & "%'"」 後は、US版で日本語を使用する時は、ntextやnvarchar等のUnicodeデータをサポート している型が良いというお話もありましたが、何をすれば良いのか、わかりません。 | ||||||||||||||||
|
投稿日時: 2006-01-19 12:25
どみのさんのおっしゃる駄目だったとは
『'ア'を含むデータを取得したいのに'ア'ではなく'あ'を含むデータも取得される』 ことを言っていますか? #駄目だったといわれましても、何がどう駄目だったのか書いていないので #とりあえず推測からいっています。 そのことだとした場合でですが、 照合順序を設定したらうまくいきましたが・・・ (といっても自分の環境はMSDE2000ですが) 参考までに、こちらで行った事をそのまま添付します。
| ||||||||||||||||
|
投稿日時: 2006-01-20 11:03
おせわになります。
どみのです。 説明不足でもうしわけありませんでした。 「'ア'」と指定しても全く無関係なデータ をとってきます。 ただ、「'C'」(半角)という半角英字を指定した場合は、 該当するものもとってきますが、無関係なものもとって きます。 | ||||||||||||||||
|
投稿日時: 2006-01-20 13:07
ごめんなさ、この照合順序を見落としていました。 MSDE2000SP4(USA版)で以下のことを試して見ました。 #test0の列に対しての照合順序を『SQL_Latin1_General_CP850_BIN』にしました。
このテーブルに対してデータを取得すると以下のような内容に変わってしまいます。
このことから、照合順序が日本語をサポートしていないので、 データを入れた時点で『A』なら『A』に 『あ』なら『?』へ変えてしまう処理が入っていると思います。 よって、変わってしまった後のデータに対して、LIKEをかけているので うまく検索できないのではないかと思います。 上記はTEXT型で試しましたが、NTEXT版でやってみたところ
となったので、NTEXT型では大丈夫のようですね。 なので対応としては DB・テーブル・列の照合順序をJapanese_BINにするか、 照合順序はそのままでNTEXTにするかの どちらかの対応になるかと思います。 #これは自分の環境で試したことなので、 #どみのさん自身の環境で入っているデータがどうなっているのか #確認してください。 | ||||||||||||||||
|
投稿日時: 2006-01-25 08:31
夏椰様
おせわになります。 どみのです。 一応、一番、最初の記述に「Japanese_BIN」などの件は うまく行かなかった旨を記述させて頂いているのですが・・・ _________________ | ||||||||||||||||
|
投稿日時: 2006-01-25 08:43
夏椰さんの記述は、 マスターDBを「Japanese_BIN」にするという意味では? _________________ IEEE-CSDP 2004-2007 | ||||||||||||||||
|
投稿日時: 2006-01-25 09:02
おせわになります。
確かに、そうですね。 DB設定のアドバイスですね。 大変、申し訳ありませんでした。 それでは、また質問をさせてください。 ■質問 1.DB側を「Japanese_BIN」にしてしまうことによる、他の 弊害は考えられないのでしょうか? つまり、現在、うまく動作している部分に影響が出るような・・・ 現在のDBはERPパッケージのデータベースシステムなので DB側の設定を変えるのが不安なのですが・・・ 2.NTEXTについて これも、DB側の設定なのでしょうか? また、どのような対応になるのでしょうか。 お忙しい中、申し訳ありませんがよろしくお願い致します。 _________________ | ||||||||||||||||
|
投稿日時: 2006-01-25 11:31
何をするにしてもDBをいじるのであれば データのバックアップ(とリストア)をする必要性が出てくるのは認識してください。 照合順序を設定できる場所が複数箇所あります。 http://msdn2.microsoft.com/ja-jp/library/ms143508.aspx DB全体の照合順序を変える場合、マスタの作り直しという作業になります。 また照合順序を変えているので、 テストも実施したほうが良いかと思います。 DB全体の照合順序はこのままで・・・という対応にする場合、 テーブル列にも照合順序を設定できるので、 任意テーブル列に設定していくことになると思います。 これは照合順序そのままでTEXT型→NTEXT型も同じ感じですかね。 ALTER TABLEで列定義を変更する際、照合順序も設定できますが 今回はTEXT型の列ということで、ALTER TABLEは使えません。 よって、テーブル定義のしなおしということになると思います。 異なる照合順序間でのデータコピーに関してはこちらが参考になると思います。 http://www.microsoft.com/japan/developer/library/adminsql/ad_impt_bcp_1y43.htm |
1