こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

検索時にヒットしない

SQL Server+Accessで使用しています。
ユーザから入力したはずのデータが検索時にヒットしないという質問があり、SQL Serverのデータベースの中を確認するとデータは存在していました。

確認のためにビューを利用して検索したのですが、データが存在するのにヒットしません。仕方ないのでワイルドカードを使用して検索するとヒットします(下例参照)。

キーとなるデータ:ABCDEFGH
検索キー:ABCDEFGH
ワイルドカード使用:LIKE 'ABCDEFG%'

検索時のキーとなるデータは8桁なのでワイルドカードを使用して1桁~8桁まで試しましたがヒットします。が、普通に検索するとヒットしません。

キーとなるデータ形式がおかしいのかと手入力してみましたが、結果は同じでした。ヒットしない原因は何なのでしょうか?

投稿日時 - 2006-06-29 14:37:19

QNo.2245412

困ってます

質問者が選んだベストアンサー

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')

投稿日時 - 2006-06-30 15:18:26

お礼

回答ありがとうございます。
教えていただいたSQLを実行したらヒットしない理由が分かりました。
IDは「ABCDEFGH ABCDEFGH 」でC0は「18」になっていました。早速DBのデータを修正しました。
不思議なのは、ビューでDBのデータを確認したときには、「ABCDEFGH」としか表示されていないんです。残りの10桁分が表示されないのはどうしてなのでしょうか?

投稿日時 - 2006-06-30 17:20:38

ANo.7

このQ&Aは役に立ちましたか?

11人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.6

s_husky です。

No1、No3の方の回答以上ではありません。
テーブルの列の型宣言とフォームでの入力・登録時の注意事項ですのでプログラミングしないのであれば関心を持つ必要はありません。

投稿日時 - 2006-06-30 15:02:16

ANo.5

スーツのデザイナーでプログラマではありません。
が、一言。
Accessプロジェクトから'ABCDEFG'と入力し直しても、'ABCDEFG___' と登録されるという SQL Server 固有の問題とそれの対策はしてますよね!

投稿日時 - 2006-06-30 09:30:32

お礼

回答ありがとうございます。

>Accessプロジェクトから'ABCDEFG'と入力し直しても、'ABCDEFG___' と登録されるという SQL Server 固有の問題とそれの対策はしてますよね!

このシステムを作成した担当者が退職していてよくわかりませんが、検索してヒットするIDとヒットしないIDがあるのでおそらく対策はしてあるのだと思います。私自身、DBは得意ではないので、上記の固有の問題を解説してあるHPがあれば教えていただきたいです。

投稿日時 - 2006-06-30 14:05:54

ANo.4

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の絡みで問題になっている気もします。

投稿日時 - 2006-06-30 09:19:18

補足

回答ありがとうございます。

>SELECT ID, Len(ID) AS C0, ~

上記のSQLを実行すると「演算子がありません」というメッセージが出て実行できません。このSQLでいいんですよね?

投稿日時 - 2006-06-30 13:56:17

ANo.3

> WHERE (ID = N'ABCDEFGH')

> WHERE (ID LIKE N'ABCDEFG%')

これでは構文エラーですが。。。
"N"が余計ですね。
恐らく"N"はミスタイプだと思いますが。

逆に、文字列の先頭の方にワイルドカードを指定すると検索できるでしょうか?

SELECT 台帳.*
FROM 台帳
WHERE (ID LIKE '%BCDEFGH')

これで引っかからないようであれば、やはりHの後ろに
スペースがあるのではないか?と思われます。

投稿日時 - 2006-06-29 18:24:51

補足

回答ありがとうございます。

>これでは構文エラーですが。。。
>"N"が余計ですね。
>恐らく"N"はミスタイプだと思いますが。

ビューでGUIから操作をすると勝手に"N"がついてしまいます。

>SELECT 台帳.*
>FROM 台帳
>WHERE (ID LIKE '%BCDEFGH')

これで試してみましたが、ヒットします。ということは、Hの後ろにスペースはないということですよね?

投稿日時 - 2006-06-30 08:42:12

ANo.2

どのようなSELECT文を発行してますか?
ここにコピーしてみていただくことは可能ですか?

'ABCDEFGH'の大文字・小文字の違いは確かめましたでしょうか?

投稿日時 - 2006-06-29 16:56:28

補足

回答ありがとうございます。
SELECT文は以下のようになります。

ヒットしない例
SELECT 台帳.*
FROM 台帳
WHERE (ID = N'ABCDEFGH')

ヒットする例
SELECT 台帳.*
FROM 台帳
WHERE (ID LIKE N'ABCDEFG%')

LIKE N'ABCDEFG%' はLIKE N'A%' ~ LIKE N'ABCDEFGH%' を試して全てヒットします。

投稿日時 - 2006-06-29 17:39:41

ANo.1

> キーとなるデータ:ABCDEFGH
ABCDEFGHの後ろにスペースが入ってませんか?
'ABCDEFGH '
みたいに。

投稿日時 - 2006-06-29 14:44:56

補足

回答ありがとうございます。
スペースが入っていることも考えて、該当のデータを一度削除して再入力したんですが、それでもヒットしないんです。

投稿日時 - 2006-06-29 14:48:28

あなたにオススメの質問