四、常见的字符串函数
<1>LENGTH(str):
求字符串长度(以字节为单位),返回字符串str的字节长度。
注:在GBK编码中,一个中文字符为2个字节。UTF-8编码中,一个中文字符为3个字节,一个英文字符为1个字节。
例:
*SELECT LENGTH('玩s')*
返回结果为4。
<2>CHAR_LENGTH(str):
获取字符串的长度,单位为字符。
例:
*SELECT CHAR_LENGTH('玩s')*
返回结果为2。
<3>FORMAT(X,D):
以四舍五入的方式保留X小数点的后D位,返回结果以字符串的形式。
注:若D为0,则返回结果不包含小数部分。
例:
*SELECT FORMAT(20.45684,3)*
返回结果:20.457
*SELECT FORMAT(20.45684,0)*
返回结果:20
<4>INSERT(str,pos,len,newstr):
从原str的pos位置开始,用字符串newstr来替换,替换长度为len。
例:
*SELECT INSERT('study',1,5,'learn');*
返回结果:learn
*SELECT INSERT('study',5,1,'learn');*
返回结果:studlearn
下面我们来看一个有意思的情况
*SELECT INSERT('study',6,1,'learn');*
这个返回结果会是什么呢?按照我们的想法应该是:study
而真正的结果如下:
总结:若pos的值>(strlength+1),此时返回str,若pos=strlength,则返回str+newstr。若len超过可替换的长度,则从位置pos加上newstr。若四个参数中有一个null,则返回null。
<5>INSTR(str,substr):
返回字符串str中首次出现子字符串substr的位置。
例:
*SELECT INSTR('learning','ing');*
返回结果:6
<6>LEFT/RIGHT:字符串截取
LEFT(str,len):左截取,返回字符串str中从左边开始,前len个字符。
RIGTH(str,len):右截取,返回字符串str中从右边开始,前len个字符。
例:
*SELECT LEFT('study',3)*
返回结果:stu
<7>强大的TRIM()函数。
(1)、LTRIM(str):去掉左边的空格。
*SELECT LTRIM(' study')*
返回结果:study
(2)、RTRIM(str):去掉右边的空格。
*SELECT RTRIM('study ')*
返回结果:study
(3)、TRIM(str): 将字串首尾两端的空格移除,作用等于RTRIM和LTRIM两个函数共同的结果。
SELECT trim(' study ')
返回结果:study
(4)、ALLTRIM(str):将字串左右边两边的空格移除。
(5)、trim函数去除指定的开头字符
select trim(leading 'x' from 'xstudy')
返回结果:study
(6)、trim函数去除指定的结尾字符
select trim(trailing 'o' from 'studyo')
返回结果:study
(7)、trim函数去除指定的首部和尾部字符
select trim(both 'o' from 'ostudyo')
返回结果:study
(8)、默认情况下,trim函数会去除首部和尾部,被指定的字符
select trim('o from 'ostudyo')
返回结果:study
(9)、如果没有指定被移除的字符,则会默认去除首部和尾部的空格
select trim(' study ')
返回结果:study
<8>、STRCMP(expr1,expr2):判断字符串是否相等
若相等返回0,若expr1 < expr2返回-1,其余情况返回1。
注:此处字符串的大小根据ANSI编码来比较。
SELECT STRCMP(30,30)
返回结果:0
<9>、concat:字符串拼接
CONCAT(str1,str2,…):返回结果为将str1,str2…拼接之后产生的字符串。若任何一个为null,则返回null。
SELECT CONCAT('I','like','learning')
返回结果:Ilikelearning