2012-05-10 8 views
2

私は、このSQL文を持っている:Firebird:なぜこのSQL文が存在するときにレコードを見つけられないのですか?

SELECT * from tBooks where BookNbr = '20111122-001' 

BookNbrはvarchar (15)として定義され、レコードがテーブルに存在しません。

は、私はそれがダッシュとは何かを持っているかもしれないと思うが...なぜ

+0

多分あなたのデータにはスペースがあります。 try '' BookNbr like '20111122-001%' ' –

+0

BookNbrが' 20111122-001% 'のようなtBooksからSELECT *などのようなことをするとどうなりますか?末尾のスペースを探しましたか? –

+0

@ juergend-あなたは私にもそれを打つ。 –

答えて

3

を知らないので、それはおそらくハイフン全角ダッシュの問題対対半角ダッシュです。 (あなたはマルチバイト文字が表示されるかどうかを確認するために、ASCIIエディタに表示されたマッチングフィールドを貼り付けることで、これを確認することができます。)

SELECT * from tBooks where BookNbr like '20111122%001' 

%が真っ只中に特定の句読点を無視するように。

+0

とアンダースコアが良いだろう。 – Jesse

+0

@ Jesse:フィールドがユニコードでない場合、同じ問題が発生する可能性があります。 – wallyk

+0

"regular expr"の一部としてダッシュを取っているとしますか? __ "where句で? – SpokaneDude

0

@wallykによって提供される解決策に加えて、問題は、破損インデックスエントリによって引き起こされ得ます。あなたは、これは、レコードを返さない場合、それは、バックアップするのが賢明とインデックスを再構築する(またはインデックスを削除して再作成する)データベースを復元します

SELECT * from tBooks where BookNbr||'' = '20111122-001' 

を使用して索引をバイパスすることにより、これを確認することができます。

関連する問題