14

髪を引っ張ってきました。私は非常に単純なpostgreデータベースを持っています.1つの特定のテーブルには、lName(大文字のN)という名前の列があります。これで、postgre では大文字の N が含まれているため、lName をクォートする必要があることがわかりました。

次のステートメントを使用してデータベースにクエリを実行しようとしています。

SELECT * 
FROM employee 
WHERE "lName" LIKE "Smith"

しかし、私はこのエラーを受け取ります:

警告: pg_query() [function.pg-query]: クエリが失敗しました: エラー: 列 "Smith" が ..... に存在しません

ここでの問題は何ですか?コラムが「Smith」と表示されているのはなぜですか?

4

2 に答える 2

32

私は推測します:

 SELECT * FROM employee WHERE "lName" LIKE 'Smith'

(異なる引用符に注意してください。"foo"は引用符で囲まれた識別子です。'foo'は文字列リテラルです)

また、ほとんどの SQL ダイアレクトでは、ワイルドカードなしの a は;LIKEと同等です。=ワイルドカードを含めることを意味しましたか?

于 2011-04-27T06:25:01.120 に答える
5

は識別子であるため"Smith"、その位置では、識別子は列であると想定されます。おそらくあなたが意味したのは、一重引用符を使用する文字列リテラルです: 'Smith'. そう

SELECT * FROM employee WHERE "lName" LIKE 'Smith'

おそらく、検索する文字列にワイルドカード ( 'Smith%'?) も必要です。 LIKE通常の正規表現によるマッチングとは異なり、マッチングは文字列の最初と最後に固定されます。

于 2011-04-27T07:37:40.873 に答える