SQL CONCAT函数空格问题:为何拼接'city'前需加空格?
为什么CONCAT里需要加空格才能匹配正确的首都名称?
这是个非常接地气的问题,核心原因其实和数据库里存储的首都名称的实际格式直接挂钩!
咱们先拿你提到的墨西哥例子拆解来看:
- 数据库里,墨西哥的国家名
name字段值是Mexico - 它的首都
capital字段值是Mexico City——注意这里「国家名」和「City」之间是有一个空格的
正确的查询为什么能生效?
这条查询:
SELECT name FROM world WHERE capital = CONCAT(name, ' city');
CONCAT(name, ' city')会把国家名和' city'(前面带空格)拼接起来,比如墨西哥的情况就会生成Mexico city。如果数据库的排序规则不区分大小写(大部分场景都是这样),这个结果就和存储的Mexico City完全匹配,自然能查出正确的国家。
错误的查询为什么没结果?
再看这条:
SELECT name FROM world WHERE capital = CONCAT(name, 'city');
这里CONCAT拼接的是国家名和'city'(没有空格),生成的结果是Mexicocity——这和实际存储的Mexico City完全是两个不同的字符串,SQL的精确匹配(=操作符)自然找不到任何符合条件的数据。
再延伸一下
不止墨西哥,像巴拿马(Panama)的首都是Panama City,也符合「国家名 + 空格 + City」的格式。只有当拼接后的字符串和数据库里的capital字段值完全一致(包括空格、大小写这些细节),=操作符才能匹配成功。
内容的提问来源于stack exchange,提问作者Michael Dinh
相关产品推荐
相关产品推荐

