- ベストアンサー
検索時にヒットしない理由とは?
- SQL Server+Accessで使用している際に、ユーザから入力したデータが検索時にヒットしない問題が発生しました。
- データベースの中を確認すると、ユーザが入力したデータは存在していることがわかります。
- 確認のためにビューを利用して検索したところ、データが存在するにも関わらずヒットしない現象が発生しました。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
No4です。失礼しました。こちらの文法ミスです。 SELECT ID, Len(ID) AS C0, CASE when substring(ID, 1, 1)='A' THEN 1 Else 0 End AS C1, CASE when substring(ID, 2, 1)='B' THEN 1 Else 0 End AS C2, CASE when substring(ID, 3, 1)='C' THEN 1 Else 0 End AS C3, CASE when substring(ID, 4, 1)='D' THEN 1 Else 0 End AS C4, CASE when substring(ID, 5, 1)='E' THEN 1 Else 0 End AS C5, CASE when substring(ID, 6, 1)='F' THEN 1 Else 0 End AS C6, CASE when substring(ID, 7, 1)='G' THEN 1 Else 0 End AS C7, CASE when substring(ID, 8, 1)='H' THEN 1 Else 0 End AS C8, CASE when ID='ABCDEFGH' THEN 1 Else 0 End AS C9 FROM 台帳 WHERE (ID LIKE '%BCDEFGH')
その他の回答 (6)
s_husky です。 No1、No3の方の回答以上ではありません。 テーブルの列の型宣言とフォームでの入力・登録時の注意事項ですのでプログラミングしないのであれば関心を持つ必要はありません。
スーツのデザイナーでプログラマではありません。 が、一言。 Accessプロジェクトから'ABCDEFG'と入力し直しても、'ABCDEFG___' と登録されるという SQL Server 固有の問題とそれの対策はしてますよね!
お礼
回答ありがとうございます。 >Accessプロジェクトから'ABCDEFG'と入力し直しても、'ABCDEFG___' と登録されるという SQL Server 固有の問題とそれの対策はしてますよね! このシステムを作成した担当者が退職していてよくわかりませんが、検索してヒットするIDとヒットしないIDがあるのでおそらく対策はしてあるのだと思います。私自身、DBは得意ではないので、上記の固有の問題を解説してあるHPがあれば教えていただきたいです。
- sakko99
- ベストアンサー率63% (19/30)
SELECT ID, Len(ID) AS C0, CASE substring(ID, 1, 1)='A' THEN 1 Else 0 End AS C1, CASE substring(ID, 2, 1)='B' THEN 1 Else 0 End AS C2, CASE substring(ID, 3, 1)='C' THEN 1 Else 0 End AS C3, CASE substring(ID, 4, 1)='D' THEN 1 Else 0 End AS C4, CASE substring(ID, 5, 1)='E' THEN 1 Else 0 End AS C5, CASE substring(ID, 6, 1)='F' THEN 1 Else 0 End AS C6, CASE substring(ID, 7, 1)='G' THEN 1 Else 0 End AS C7, CASE substring(ID, 8, 1)='H' THEN 1 Else 0 End AS C8, CASE ID='ABCDEFGH' THEN 1 Else 0 End AS C9 FROM 台帳 WHERE (ID LIKE '%BCDEFGH') で確認するとどうでしょうか? > ビューでGUIから操作をすると勝手に"N"がついてしまいます。 ID列がNCHARまたはNVARCHARなんだと思いますが、 本当にID列は1バイトコードですか? UNICODEの絡みで問題になっている気もします。
補足
回答ありがとうございます。 >SELECT ID, Len(ID) AS C0, ~ 上記のSQLを実行すると「演算子がありません」というメッセージが出て実行できません。このSQLでいいんですよね?
- 12pockets
- ベストアンサー率30% (8/26)
> WHERE (ID = N'ABCDEFGH') > WHERE (ID LIKE N'ABCDEFG%') これでは構文エラーですが。。。 "N"が余計ですね。 恐らく"N"はミスタイプだと思いますが。 逆に、文字列の先頭の方にワイルドカードを指定すると検索できるでしょうか? SELECT 台帳.* FROM 台帳 WHERE (ID LIKE '%BCDEFGH') これで引っかからないようであれば、やはりHの後ろに スペースがあるのではないか?と思われます。
補足
回答ありがとうございます。 >これでは構文エラーですが。。。 >"N"が余計ですね。 >恐らく"N"はミスタイプだと思いますが。 ビューでGUIから操作をすると勝手に"N"がついてしまいます。 >SELECT 台帳.* >FROM 台帳 >WHERE (ID LIKE '%BCDEFGH') これで試してみましたが、ヒットします。ということは、Hの後ろにスペースはないということですよね?
- 12pockets
- ベストアンサー率30% (8/26)
どのようなSELECT文を発行してますか? ここにコピーしてみていただくことは可能ですか? 'ABCDEFGH'の大文字・小文字の違いは確かめましたでしょうか?
補足
回答ありがとうございます。 SELECT文は以下のようになります。 ヒットしない例 SELECT 台帳.* FROM 台帳 WHERE (ID = N'ABCDEFGH') ヒットする例 SELECT 台帳.* FROM 台帳 WHERE (ID LIKE N'ABCDEFG%') LIKE N'ABCDEFG%' はLIKE N'A%' ~ LIKE N'ABCDEFGH%' を試して全てヒットします。
- 12pockets
- ベストアンサー率30% (8/26)
> キーとなるデータ:ABCDEFGH ABCDEFGHの後ろにスペースが入ってませんか? 'ABCDEFGH ' みたいに。
補足
回答ありがとうございます。 スペースが入っていることも考えて、該当のデータを一度削除して再入力したんですが、それでもヒットしないんです。
お礼
回答ありがとうございます。 教えていただいたSQLを実行したらヒットしない理由が分かりました。 IDは「ABCDEFGH ABCDEFGH 」でC0は「18」になっていました。早速DBのデータを修正しました。 不思議なのは、ビューでDBのデータを確認したときには、「ABCDEFGH」としか表示されていないんです。残りの10桁分が表示されないのはどうしてなのでしょうか?