11

非常に単純な質問であることが証明されると確信している質問をすることを前もってお詫びします。

特に電話番号のフィールドを含むMySQL(5.5)データベースがあります。そのフィールドを検索してスペースを削除するステートメントを作成しようとしています。したがって、「0208」を検索すると、「020 8」、「02 08」、「0 208」、「0208」などが返されます。

そして、これは Delphi XE2 にあります。違いが生じる場合に備えて。

'SELECT * FROM sales_ledger WHERE REPLACE(telephone, " ", "") LIKE "%' + SearchEdit.Text + '%"'

...エラーが表示されます...

WHERE 句のフィルタが無効です

...と...

'SELECT REPLACE(telephone, " ", "") FROM sales_ledger WHERE REPLACE(telephone, " ", "") LIKE "%' + SearchEdit.Text + '%"'

...私に与える...

フィールド名が無効です。一般的な SQL エラー。列が見つかりません。

...とにかく、実際にはすべてのフィールドが返される必要があります。

構文を修正するための支援をお願いできますか。さらに詳しい情報が必要な場合は、お気軽にお問い合わせください。ありがとうございました。

編集: 私が見逃した潜在的に重要な情報の 1 つです。テーブルは実際には、ODBC 経由でアクセスしている Sage データベースです。私が試したことは何も機能していないので、それが根本的な問題である可能性があります。それを先に言わなかったことをお詫びします。

4

2 に答える 2

8

あなたのクエリは正常に動作しているようですデモを見る

最初にDBクライアントにこのクエリを試してください

SELECT * FROM sales_ledger 
WHERE REPLACE(telephone, " ", "") LIKE "%0208%"

編集:

クエリがまだ機能していない場合。仲間の段階的なプロセス。

  • 単純な選択クエリを実行してみてください ( SELECT * FROM sales_ledger)
  • 最初のクエリを実行する場合は、単純な where 条件を追加してみてください。そのため、段階的にクエリを元のクエリに似たものにして、実際のエラーの原因を見つけることができます。
于 2012-12-28T12:03:22.963 に答える
4

これを試して ::

SELECT 
REPLACE(telephone,' ', '') as replacedColumn
FROM sales_ledger 


WHERE REPLACE(telephone,' ', '') LIKE '%"+ SearchEdit.Text +"%'"

また

Select temp1.* 
from
(
SELECT 
REPLACE(telephone,' ', '') as replacedColumn
FROM sales_ledger 
) as temp1

WHERE temp1.replacedColumn LIKE '%"+SearchEdit.Text+"%'"
于 2012-12-28T11:57:21.180 に答える