题目:
"Monaco-Ville"是合併國家名字 "Monaco" 和延伸詞"-Ville".
顯示國家名字,及其延伸詞,如首都是國家名字的延伸。
你能够使用SQL函數 REPLACE 或 MID.
解题思路:
(1)REPLACE函数的用法。
REPLACE函数:用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式。
语法:REPLACE( 'st1' , 'str2' , 'str3' )
参数:
'str1':带搜索的字符串表达式。str1可以是字符数据或二进制数据。
‘str2’:在str1中查找的字符串表达式。str2可以是字符数据或二进制数据。
'str3':在str1中将匹配到的str2替换的字符串表达式。str3可以是字符数据或二进制数据。
返回类型:
如果str(1、2、3)是支持的字符数据类型之一,则返回字符数据。如果str(1、2、3)是支持的binary数据类型之一,则返回二进制数据。
示例:str1='Hello World' str2='o' str3='p'
REPLACE( str1, str2, str3 ) = ‘Hellp Wprld’
(2)CONCAT()函数的用法。
CONCAT()函数:用于将两个字符串连接起来,形成一个单一的字符串。
示例:SELECT CONCAT( 'FIRST ' , 'SECOND') = FIRST SECOND
(3)MID()函数的用法。
MID()函数:用于从文本字段中提取字符。
语法:SELECT MID(column_name, start[, length] ) FROM table_name
参数:
column_name:要提取字符的字段。
start:规定开始位置(起始值是1)。
length:可选参数。要返回的字符数。如果省略,则MID()函数返回剩余文本。
示例:
我们拥有下面这个 "Persons" 表:
Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
3 | Carter | Thomas | Changan Street | Beijing |
现在,我们希望从 "City" 列中提取前 3 个字符。
我们使用如下 SQL 语句:
SELECT MID(City,1,3) as SmallCity FROM Persons
结果集类似这样:
SmallCity |
---|
Lon |
New |
Bei |
回到最初的题目,解题思路如下:
一、筛选什么?
【1】国家名字【2】衍生词
故要筛选两列column,分别是name以及REPALCE(capital, name, '')(这句话起到把capital中name字符串去掉的作用)
二、筛选条件?
capital的名字是【 name + '延伸词' 】的组合,故条件为
WHERE capital LIKE CONCAT ( name, '%_' ) (延伸词至少包含一个字符,故使用 '%_' )
综上所述,题解答案为:
SELECT name, REPLACE (capital, name, '') AS extend
FROM world
WHERE capital LIKE CONCAT ( name, '%_' ) ;
正确答案显示为:
name | extend |
---|---|
Andorra | la Vella |
Guatemala | City |
Kuwait | City |
Mexico | City |
Monaco | -Ville |
Panama | City |