user_name表:
firstname | middlename | lastname |
John | Wilson | Smith |
Adam | Edward | Davis |
Marie | Elaine | White |
我们在日常的工作中,使用SQL语句查询出数据后,需要对一些数据的字段做一些合并、取其一段或是去掉空格的处理。这里我们就会用到SQL语句中的CONCAT(链接)、SUBSTR(获取部分字符)和TRIM(移除部分字符)。
CONCAT 在不同类型的数据库中使用的方式也有一点点的区别。在MySQL中链接的字符串数量时没有限制的。如:
SELECT CONCAT (firstname, lastname) AS fullname FROM user_name WHERE lastname = 'White' ;
得出的结果:
fullname |
MarieWhite |
SELECT CONCAT (firstname, middlename,lastname) AS fullname FROM user_name WHERE lastname = 'White' ;
得出的结果:
fullname |
MarieElaineWhite |
这两个SQL语句都是可以正常查询的。
但是Oracle数据库中,CONCAT()只允许两个参数,如果需要多个参数合并时就需要使用‘||’符号。如:
SELECT CONCAT (firstname, lastname) AS fullname FROM user_name WHERE lastname = 'White' ;
得出的结果:
fullname |
MarieWhite |
SELECT CONCAT (firstname, middlename,lastname) AS fullname FROM user_name WHERE lastname = 'White' ; 系统会报错,无法执行此条SQL语句。正确的SQL写法
SELECT firstname||middlename||lastname AS fullname FROM user_name WHERE lastname = 'White' ;
得出的结果:
fullname |
MarieElaineWhite |
同样在SQL Server数据库中,也有同样的问题,只不过不是使用‘||’来链接多个字符串,而是使用‘+’ 。 如
SELECT firstname + middlename + lastname AS fullname FROM user_name WHERE lastname = 'White' ;
得出的结果:
fullname |
MarieElaineWhite |
SUBSTR 获取部分字符串,它在不同类型的数据库中使用的方法也有一点点的区别。MySQL中SUBSTR()和SUBSTRING()都可以使用,Oracle中只能使用SUBSTR(),而SQL Server中只能使用SUBSTRING()。
SUBSTR()本身有两种使用的方式,一种是SUBSTR(str, pos) str指字符串,pos只从第几位开始。SELECT SUBSTR (firstname, 2) FROM user_name WHERE firstname = 'Adam' 结果表示:从'Adam'的第2位开始读取字符串。另一种是SUBSTR(str, pos, len) len指获取的字符串长度。 SELECT SUBSTR (firstname, 2, 3) FROM user_name WHERE firstname = 'Marie' 结果表示:从'Marie'的第2位开始,向后3个字符长度的字符串。
TRIM 移除字符串中不需要的字符。TRIM([位置] [需要移除的字符串]FROM 原字符串): [位置] 可以是LEADING(起始)、TRAILING(结尾)或BOTH(起始和结尾)。[需要已出单额字符串]没有明确的时候,那原字符串中空白就会被移除。如: middlename 列表中,从起始开始,移除E字符
SELECT middlename, TRIM(LEADING 'E' FROM $LISTTOSTRING(middle)) AS Trimmed FROM user_name WHERE middlename IS NOT NULL $LISTTOSTRING 指从列表创建字符串的列表函数。
middlename | Trimmed |
Wilson | Wilson |
Edward | dward |
Elaine | laine |
middlename 列表中,从结尾开始,移除rd字符
SELECT middlename, TRIM(TRAILING 'rd' FROM $LISTTOSTRING(middle)) AS Trimmed FROM user_name WHERE middlename IS NOT NULL
middlename | Trimmed |
Wilson | Wilson |
Edward | Edwa |
Elaine | Elaine |
middlename 列表中,从起始和结尾开始,移除'E' 'on'字符
SELECT middlename, TRIM(TRAILING 'E' 'on' FROM $LISTTOSTRING(middle)) AS Trimmed FROM user_name WHERE middlename IS NOT NULL
middlename | Trimmed |
Wilson | Wilso |
Edward | dward |
Elaine | laine |