2016-05-13 6 views
1

多分私は痛いほど明白な何かを見逃していますが、私はタイプの文字(50)と '電子メール'と呼ばれる列のテーブルから選択しようとしています。私のpostgresql SELECT文が0行を返すのはなぜですか?

私は簡単なテストを設定しましたが、私はこれ以外のすべての列を正常にクエリできます。今のところ、 'name'列と 'password'列も文字型(50)です。

サンプルのメールアドレス「[email protected]」をデータベースに記載されているとおりにコピー&ペーストしています。余分なスペースはありません。ここで

私のテーブルには、 'ユーザー' と呼ばれている:

id | name |  email  | password 
--------------------------------------------- 
10 | john | [email protected] | adsfpokasdf 

私のクエリは次のとおりです。

SELECT name FROM users WHERE email = '[email protected]'; 

は、カラム型の私の選択に問題はありませんか?たぶん Why is this postgresql SELECT statement returning 0 rows?

+1

メールに先頭または末尾の空白がある可能性がありますか? 'ユーザからの電子メールを選択する'は何を返しますか? –

+1

[提案された](http://stackoverflow.com/questions/37217565/why-does-my-postgresql-select-statement-return-0-rows#comment61966342_37217565)をテストする別の方法は、 'trim()'を使用することです。関数: 'どこでtrim(email)= 'johnsmith @ gmail.com'です。 –

答えて

1

多分私は痛いほど明白な何かを欠いているが、私は試している「email」というタイプの文字(50)という列を持つテーブルから選択します。

これは問題です。タイプcharacter varyingvarcharとも呼ばれます。textタイプも長さチェックなしで動作します)。 character(50)は長さ50の文字列だけを保持し、それを埋めるためにスペースで埋めます。

varchar(50)またはtextという列の種類のテーブルを再作成して、もう一度やり直してください。期待に近づくはずです。

-1

「@」PostgreSQLのパターンマッチングのために使用されます。ここでは

は絵ですか?もしそうなら、それはそれに先行するエスケープ文字が必要な場合があります...

TRY:

SELECT name FROM users WHERE email = 'johnsmith\@gmail.com'; 

また(THISポストから)試してみてください。

SELECT name FROM users WHERE email = E'[email protected]'; 

最後に:

SELECT name FROM users WHERE email = E'johnsmith\@gmail.com'; 
+0

良い考え - 私はこれを試みましたが、それはまだ動作しませんでした。私は元の行を削除し、同じ情報で再び作成しました。また、私はそれを再度クエリしました。私は見ていないいくつかの文字の不一致があったに違いない。 お返事ありがとうございます。 – Jcr

+0

あなたはそれがうまくいってうれしい! – Sturgus

関連する問題