SQL语句_字符串的处理

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
posted @ 2023-06-20 14:03  Alpha_To_Beta  阅读(143)  评论(0)    收藏  举报