为什么我的postgresql SELECT语句返回0行?

时间:2016-05-13 19:05:23

标签: postgresql select

也许我错过了一些非常明显的东西但是我试图从一个名为' email'带字符(50)。

我设置了一个简单的测试,我可以成功查询除此之外的所有其他列。目前,专栏名称'和密码'也是类型字符(50);

我正在复制并粘贴示例电子邮件' johnsmith@gmail.com'完全如数据库中列出的那样,我确信没有多余的空格。

这是我的名为' users':

的表格
id | name |        email        | password
---------------------------------------------
10 | john | johnsmith@gmail.com | adsfpokasdf

我的查询是:

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

我选择的列类型有问题吗?

这是一张图片: Why is this postgresql SELECT statement returning 0 rows?

3 个答案:

答案 0 :(得分:1)

  

也许我错过了一些非常明显的东西但是我试图从一个名为' email'带字符(50)。

这是你的问题。您需要类型character varying(也称为varchartext类型也可以正常工作,无需进行长度检查。 character(50)只会保存长度为50的字符串,并会用空格填充它以填充它。

重新创建列类型为varchar(50)text的表格,然后重试。它应该更接近期望。

答案 1 :(得分:0)

我必须从

更改where子句
SELECT "fieldId" FROM MyTable WHERE 'fieldId' = 'stringid'

SELECT "fieldId" FROM MyTable WHERE "fieldId" = 'stringid'

基本上,where子句中的单引号要加倍。我不确定为什么要引用它,但是在某些postgres实例中,我不得不这样做。

希望这对其他人有帮助:)

答案 2 :(得分:-2)

也许'@'用于PostgreSQL中的模式匹配?如果是这样,它可能需要在它之前的转义字符......

TRY:

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

还可以尝试(来自THIS帖子):

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

最后:

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