dポイントプレゼントキャンペーン実施中!

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

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

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

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

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

A 回答 (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')
    • good
    • 1
この回答へのお礼

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

お礼日時:2006/06/30 17:20

s_husky です。



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

スーツのデザイナーでプログラマではありません。


が、一言。
Accessプロジェクトから'ABCDEFG'と入力し直しても、'ABCDEFG___' と登録されるという SQL Server 固有の問題とそれの対策はしてますよね!
    • good
    • 0
この回答へのお礼

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

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

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

お礼日時:2006/06/30 14:05

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でいいんですよね?

補足日時:2006/06/30 13:56
    • good
    • 0

> 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の後ろにスペースはないということですよね?

補足日時:2006/06/30 08:42
    • good
    • 0

どのような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%' を試して全てヒットします。

補足日時:2006/06/29 17:39
    • good
    • 0

> キーとなるデータ:ABCDEFGH


ABCDEFGHの後ろにスペースが入ってませんか?
'ABCDEFGH '
みたいに。

この回答への補足

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

補足日時:2006/06/29 14:48
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す