有些人可以向我解释为什么postgresql中的这种比较不按照我想要的方式工作吗?
所以我有一个名为customer的数据库,它有customerid,firstname,lastname,phone和city列。这些列中的每一列都是一个Character(50)。我想找到来自某个城市的客户,并试图找出如何选择某个城市的多个查询...我觉得这将是一个简单的答案,但我对sql查询很新。
我运行的第一个查询是
SELECT *
FROM customer c
WHERE c.city = 'Denver'
这个查询没有返回任何结果,我也尝试了LIKE,ILIKE似乎没什么工作我甚至将它从字符(50)更改为字符变化但仍然没有结果..不确定我在这里做错了什么
答案 0 :(得分:1)
因为character
将所有值填充到定义的长度。因此'Denver'
存储为'Denver '
字符类型的值用空格填充到指定的宽度n,并以这种方式存储和显示
这是SQL标准定义此数据类型的方式。这是一个古老的遗留下来。
简而言之:从不使用character
。使用varchar
总是更好(基本上每个SQL数据库都是如此 - 对于Postgres来说更是如此)。
答案 1 :(得分:1)
您可以使用与此类似的查询自行回答:
SELECT FORMAT('''%s''',city) FROM customer WHERE city ILIKE 'D%';
您正在寻找价值'丹佛'所以我可以想到三个场景:
CHAR(50)
每次都有50个字符。搜索只有六个字符的字符串将正确生成没有记录。我建议你定义VARCHAR或VARCHAR(50)。 CHAR对于诸如2个字母的州缩写之类的固定长度令牌更有用。但你尝试了一个LIKE查询...... SELECT * FROM customer WHERE city LIKE 'D%';
感觉像(2)或(4)一样。