Concat中的空格在SQL中起作用

时间:2018-01-28 02:07:13

标签: mysql sql select concatenation concat

我尝试了以下问题:

墨西哥首都是墨西哥城。显示首都所在的所有国家/地区和#34; City"。 找到首都是国家的国家和#34;城市"。

我想知道为什么这个查询是正确的:

SELECT name
FROM world
WHERE capital = CONCAT (name, ' city');

然而这个不是:

SELECT name
FROM world
WHERE capital = CONCAT (name, 'city');

为什么CONCAT函数的这个实例在“城市”之前需要一个空格?

4 个答案:

答案 0 :(得分:1)

第二个条目只有在该国的首都是例如墨西哥城时才会匹配。

因为它将名称与城市联系起来,例如'name'+'city'='mexicocity',这将与'墨西哥城'不匹配

答案 1 :(得分:0)

有什么好奇的?空格是字符串的一部分,你的字符串是“墨西哥城”,你的name列只是“墨西哥”,如果你把“城市”连成它,你会得到“墨西哥城”而不是“墨西哥城”。

答案 2 :(得分:0)

  

为什么concat函数的这个实例在'city'之前需要一个空格?

这是因为首都名称之间确实有一个空格。您正在使用' ' + [city]连接字符串。

  

CONCAT采用可变数量的字符串参数并将它们连接成一个字符串。它至少需要两个输入值;否则,会引发错误。所有参数都隐式转换为字符串类型,然后连接。

例如,考虑一下这个测试数据(你可以测试它here

;WITH world (country, capital) AS (
    SELECT 'Mexico','Mexico City' UNION ALL
    SELECT 'Guatemala','Guatemala City' UNION ALL
    SELECT 'Panama','Panama City' UNION ALL
    SELECT 'South Korea','Seoul' UNION ALL
    SELECT 'Vatican City','Vatican City'
    )

--verify  
--Mexico (Mexico City)
--Guatemala (Guatemala City)
--Panama (Panama City)
--NOT return Vatican City because 'Vatican City' <> 'Vatican City City'
SELECT * 
FROM world 
WHERE capital = CONCAT(country, ' City')

enter image description here

答案 3 :(得分:0)

如果检查正确,首都之间的名称和城市之间有空间,因此以下查询无效

SELECT name FROM world WHERE capital = concat(name, 'city');

所以你应该使用替换从资本中移除空间,或者在名称和城市中添加空格,如下所示

SELECT name FROM world WHERE replace(capital, ' ', '') = concat(name, 'city'); --return value

或者

SELECT name FROM world WHERE capital = concat(name, ' city'); --return value

或者

SELECT name FROM world WHERE capital = concat(name, ' ', 'city'); --return value