2016-05-19 8 views
0

私はCustomerNameフィールドを持つテーブルを持っています。Foxpro SELECTクエリcant find item is case is not correct

SELECT fieldA, fieldB, fieldC 
from CustomersTable 
WHERE CustomerName='CustomerABC' 

これはレコードを返しますが、ケースが間違っている場合、それは何も返さない:私は、顧客名は次のように「CustomerABC」私の選択クエリがあるレコードを持っています。例えば

SELECT fieldA, fieldB, fieldC 
from CustomersTable 
WHERE CustomerName='customerabc' 

は結果を生成しません。

確かに、ユーザーは、検索しているレコードの正しい大文字小文字を認識することは予想されません。誰かが私にこれを助けてくれますか?デフォルトFoxProの===事業者による

おかげ ジョン

+0

はちょうど私は、文字列を強制的ならば、私はこれを使用することができます大文字に変換されるように送られていることに気づい

感謝をどのように動作するかであることが確認されていますうれしいですCUSTOMERABC ' – user2463687

+0

は、この単純な仕事のために長らく残っているようです - これは通常foxproのためですか? – user2463687

+0

はい、これはVFPでは正常です。データは大文字と小文字が区別されるため、大文字と小文字を区別しない検索を行うには、コードを記述する必要があります。 –

答えて

1

は大文字と小文字が区別されますので、これはクエリに影響を与えます。ただし、コマンドSET COLLATE TO "GENERAL"を使用して動作を変更し、比較操作で大文字と小文字を一致させることができます。

デフォルトを使用して大文字小文字を区別する場合は、UPPER()またはLOWER()関数を使用して比較する文字列を変換します。クエリがコードで実行される場合(コマンドウィンドウ内のアドホッククエリと比較して)、通常、テーブルのデータが特定の形式でフォーマットされていることがわかっている場合を除き、比較の両側に関数を適用することをお勧めします方法。文字列の比較を使用しているとき、彼らはパディング文字列と異なる長さの文字列の動作を制御するよう

SELECT fieldA, fieldB, fieldC 
from CustomersTable 
WHERE UPPER(CustomerName)=UPPER('customerabc') 

また、SET EXACTSET ANSI設定の影響を考慮してください。

+0

COLLATEを「一般」に設定するといくつかの結果が生じることに注意することが重要です。まず、索引キーは240文字ではなく、120文字でなければならないことを意味します。第2に、 "MACHINE"以外の照合順序でRushmore最適化を失うことがあります。全体として、この目的のためにUPPER()を使用する方が良いでしょう。 –

0

私は時々使用して...

ALLTRIM(UPPER(CustomerName)) == UPPER('customerabc') 

...または私はちょうど... ...私が使用する変数または別のフィールドに一致するように

ALLTRIM(UPPER(CustomerName)) == ALLTRIM(UPPER(SomeOtherField)) 

をしようとしている場合私は私の正確な一致を得ることを確認する。

+0

ALLTRIM()でラップすると、最適化が妨げられる可能性があることに注意してください。Rushmoreは、比較の片側が既存のインデックスタグと正確に一致する場合にのみ機能します。 –

+0

良い点。大きなデータセットには使用しないでください。 – JustAspMe

0

私は賢明な選択肢を選んだようですが、あなたの返信ありがとうございます。 UPPERの選択肢(と私のクエリはまだ非常に高速です)私はこれに固執すると思う)。 WHERE UPPER(CustomerNameの)=」..これはFoxProが再び ジョン

+0

これはほとんどのデータベースがどのように機能するかを示しています。 –