我尝试了以下问题:
墨西哥首都是墨西哥城。显示首都所在的所有国家/地区和#34; City"。 找到首都是国家的国家和#34;城市"。
我想知道为什么这个查询是正确的:
SELECT name
FROM world
WHERE capital = CONCAT (name, ' city');
然而这个不是:
SELECT name
FROM world
WHERE capital = CONCAT (name, 'city');
为什么CONCAT
函数的这个实例在“城市”之前需要一个空格?
答案 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')
答案 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