首页 > 解决方案 > WHERE 中的字符串比较未返回适当的行

问题描述

我有一张Parts我用create table Parts(pid int, pname varchar(30),color varchar(30));.

我在其中加载了一些数据:

SELECT * FROM Parts;
 pid |   pname   |   color   
-----+-----------+-----------
   1 |  'thing'  |  'red'
   2 |  'thing2' |  'red'
   3 |  'thing3' |  'purple'
   4 |  'thing4' |  'green'
   5 |  'thing5' |  'green'
(5 rows)

我想获取 color 所在的所有行red,但是当我尝试我认为正确的查询时,结果如下:

SELECT * FROM Parts WHERE color = 'red';
 pid | pname | color 
-----+-------+-------
(0 rows)

我在这里做错了什么?

谢谢你。

标签: sqlpostgresql

解决方案


您在字符串中有引号。通常psql会显示不带引号的字符串我是否希望看到这样的输出:

SELECT * FROM Parts;
 pid |   pname   |   color   
-----+-----------+-----------
   1 |  thing    |  red
   2 |  thing2   |  red
   3 |  thing3   |  purple
   4 |  thing4   |  green
   5 |  thing5   |  green
(5 rows)

所以我猜你以某种方式插入'''red'''而不是'red'.

一个快速的'n'dirty检查将是看:

select '-' || color || '-' from parts;

看看你得到了什么。这也会向您显示任何杂散的空白(但不是有趣的 Unicode 字符)。


推荐阅读