《MySQL 入门教程》第15篇MySQL常用函数之字符函数

文章来源:https://blog.csdn.net/horses/article/details/107487470
原文作者:不剪发的Tony老师
来源平台:CSDN
上一篇讨论了MySQL中常用的数学函数,本篇我们介绍常用的MySQL字符函数。
字符函数和运算符用于对字符串数据进行处理和分析并返回一个结果。以下是MySQL中常见的字符函数和运算符:
下面我们通过一些示例来说明这些函数的作用。
15.1字符与编码转换ASCII(str)函数返回字符串str第一个字符对应的ASCII编码;如果str是空字符串,返回0;如果str为NULL,返回NULL。例如:
selectascii(‘ABC’),ascii(‘’),ascii(null);ascii(‘ABC’)|ascii(‘’)|ascii(null)|————|———|———–|65|0||
ORD(str)函数与ASCII(str)函数类似,但是对于多字节编码的字符返回的编码计算方式如下:
(1stbytecode)+(2ndbytecode*256)+(3rdbytecode*256^2)…
例如:
selectord(‘ABC’),ord(‘你好’);ord(‘ABC’)|ord(‘你好’)|———-|———–|65|14990752|
字符“A”属于单字节编码,返回的是ASCII码;字符“你”属于UTF-8中的三字节编码,返回的是它的编码的十进制结果。
CHAR(N,…[USINGcharset_name])函数返回每个编码N对应的字符,忽略其中的NULL参数。例如:
selectchar(77,121,83,81,‘76’);char(77,121,83,81,‘76’)|—————————|MySQL|
默认情况下,CHAR()函数返回的是二进制字符串,USING子句可以将结果转换为相应的字符集:
selectcharset(char(65)),charset(char(65usingutf8mb4));charset(char(65))|charset(char(65usingutf8mb4))|—————–|——————————-|binary|utf8mb4|
charset()函数用于返回字符串的字符集。
15.2获取字符串长度BIT_LENGTH(str)函数返回字符串的比特长度(数量),CHAR_LENGTH(str)和CHARACTER_LENGTH(str)函数返回字符串的字符长度(数量),LENGTH(str)和OCTET_LENGTH(str)函数返回字符串的字节长度。例如:
selectbit_length(‘你’),char_length(‘你’),length(‘你’);bit_length(‘你’)|char_length(‘你’)|length(‘你’)|—————|—————-|———–|24|1|3|
字符“你”在utf8mb4字符集中占用24个比特,3个字节。
15.3连接字符串CONCAT(str1,str2,…))函数用于返回多个字符串连接之后的字符串,任何参数为NULL则返回NULL。例如:
selectconcat(‘My’,‘SQL’,8.0),concat(‘My’,null,‘SQL’);concat(‘My’,‘SQL’,8.0)|concat(‘My’,null,‘SQL’)|————————|————————-|MySQL8.0||
参数中的数字会自动转换为字符串形式。
另外,对于多个连续出现的常量字符串,也会执行连接操作。例如:
select‘My’‘SQL’‘8.0’;
MySQL中的逻辑或运算符(||)在启用SQL模式PIPES_AS_CONCAT时也表示连接字符串。
CONCAT_WS(separator,str1,str2,…))函数使用指定的分隔符separator连接多个字符串,分隔符为NULL则返回NULL。例如:
selectconcat_ws(‘-’,‘My’,null,‘SQL’),concat_ws(null,‘My’,‘SQL’);concat_ws(‘-’,‘My’,null,‘SQL’)|concat_ws(null,‘My’,‘SQL’)|———————————|—————————-|My-SQL||15.4大小写转换
LOWER(str)和LCASE(str)函数用于将字符串转换为小写形式。例如:
selectlower(‘MySQL’),lcase(‘MySQL’);lower(‘MySQL’)|lcase(‘MySQL’)|————–|————–|mysql|mysql|
UPPER(str)和UCASE(str)函数用于将字符串转换为大写形式。例如:
selectupper(‘MySQL’),ucase(‘MySQL’);upper(‘MySQL’)|ucase(‘MySQL’)|————–|————–|MYSQL|MYSQL|
以上大小写转换函数不支持二进制字符串(BINARY、VARBINARY、BLOB)),可以将其转换为非二进制的字符串之后再进程处理。例如:
selectlower(binary‘MySQL’),lower(CONVERT(binary‘MySQL’USINGutf8mb4));lower(binary‘MySQL’)|lower(CONVERT(binary‘MySQL’USINGutf8mb4))|———————|——————————————–|MySQL|mysql|15.5查找子串位置
INSTR(str,substr)函数返回子串substr在字符串str中第一次出现的索引位置,没有找到子串时返回0。例如:
selectinstr(‘MySQL’,‘SQL’),instr(‘Oracle’,‘SQL’),instr(‘MySQL’,‘’),instr(‘MySQL’,null);instr(‘MySQL’,‘SQL’)|instr(‘Oracle’,‘SQL’)|instr(‘MySQL’,‘’)|instr(‘MySQL’,null)|———————|———————-|——————|——————–|3|0|1||
LOCATE(substr,str)函数返回子串substr在字符串str中第一次出现的索引位置,和INSTR(str,substr)函数唯一的不同就是参数的顺序相反;LOCATE(substr,str,pos)函数返回子串substr在字符串str中从位置pos开始第一次出现的索引位置。例如:
selectlocate(‘SQL’,‘MySQL’),locate(‘SQL’,‘MySQLvsPostgreSQL’,6);locate(‘SQL’,‘MySQL’)|locate(‘SQL’,‘MySQLvsPostgreSQL’,6)|———————-|—————————————|3|17|
第二个locate()函数从第6个字符开始查找子串“SQL”。
MySQL提供了基于正则表达式的子串位置查找函数REGEXP_INSTR(),可以实现更高复杂的功能。
FIELD(str,str1,str2,str3,…)函数返回字符串str在后续字符串列表中出现的位置,没有找到时返回0。例如:
selectfield(‘Friday’,‘Monday’,‘Tuesday’,‘Wednesday’,‘Thursday’,‘Friday’,‘Saturday’,‘Sunday’)asdow;dow|—|5|
FIND_IN_SET(str,strlist)函数返回字符串str在列表字符串strlist中出现的位置,strlist由N个子串使用逗号分隔组成。例如:
selectfind_in_set(‘Friday’,‘Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday’)asdow;dow|—|5|15.6返回子串
SUBSTRING(str,pos)、SUBSTRING(strFROMpos)、SUBSTRING(str,pos,len)以及SUBSTRING(strFROMposFORlen)函数都可以用于返回从指定位置pos开始的子串,len表示返回子串的长度;pos为0表示返回空字符串。例如:
selectsubstring(‘MySQL’,3),substring(‘MySQL’from3for3),substring(‘MySQL’,0);substring(‘MySQL’,3)|substring(‘MySQL’from3for3)|substring(‘MySQL’,0)|———————|——————————-|———————|SQL|SQL||
位置参数pos可以为负数,此时返回的子串从字符串右侧第pos个字符开始。例如:
selectsubstring(‘MySQL’,-5,2),substring(‘MySQL’from-3);substring(‘MySQL’,-5,2)|substring(‘MySQL’from-3)|————————-|————————–|My|SQL|
SUBSTR()和MID()函数是SUBSTRING()函数的同义词,也支持以上4种形式。例如:
selectsubstr(‘MySQL’,3),mid(‘MySQL’from3for3);substr(‘MySQL’,3)|mid(‘MySQL’from3for3)|——————|————————-|SQL|SQL|
SUBSTRING_INDEX(str,delim,count)函数返回第count次出现的分隔符delim之前的子串。如果count为正数,从左侧开始计数并返回左侧的所有字符;如果count为正数,从右侧开始计数并返回右侧的所有字符。例如:
selectsubstring_index(‘www.mysql.com’,‘.’,2),substring_index(‘www.mysql.com’,‘.’,-2);substring_index(‘www.mysql.com’,‘.’,2)|substring_index(‘www.mysql.com’,‘.’,-2)|—————————————-|—————————————–|www.mysql|mysql.com|
MySQL提供了基于正则表达式的子串返回函数REGEXP_SUBSTR(),可以实现更高复杂的功能。
LEFT(str,len)函数返回字符串str左侧的len个字符,RIGHT(str,len)函数返回字符串str右侧的len个字符。例如:
selectleft(‘MySQL’,2),right(‘MySQL’,3);left(‘MySQL’,2)|right(‘MySQL’,3)|—————-|—————–|My|SQL|
LTRIM(str)函数返回删除字符串str左侧所有空格之后的子串,RTRIM(str)函数返回删除字符串str右侧所有空格之后的子串。例如:
selectltrim(‘mysql’)aslt,rtrim(‘mysql’)asrt;lt|rt|——–|——–|
TRIM([{BOTH|LEADING|TRAILING}[remstr]FROM]str)和TRIM([remstrFROM]str)函数返回删除字符串str两侧/左侧/右侧所有remstr字符串之后的子串,默认删除两侧字符串(BOTH),remstr默认为空格。例如:
selecttrim(‘mysql’)astr,trim(both‘1’from‘111mysql111’)astr;tr|tr|——|—–|mysql|mysql|
ELT(N,str1,str2,str3,…)函数返回字符串列表中的第N个元素,如果N的值小于1或者大于列表中的字符个数则返回NULL。例如:
selectelt(7,‘Monday’,‘Tuesday’,‘Wednesday’,‘Thursday’,‘Friday’,‘Saturday’,‘Sunday’)asdow;dow|——|Sunday|15.7替换子串
REPLACE(str,from_str,to_str)函数用于将字符串str中的所有from_str替换为to_str,返回替换后的字符串。例如:
selectreplace(‘www.mysql.net’,‘net’,‘com’),replace(‘mysql’,‘my’,‘’);replace(‘www.mysql.net’,‘net’,‘com’)|replace(‘mysql’,‘my’,‘’)|————————————–|————————–|www.mysql.com|sql|
INSERT(str,pos,len,newstr)函数用于在字符串str的指定位置pos之后插入子串newstr,替换随后的len个字符。例如:
selectinsert(‘mysql.com’,7,3,‘cn’),insert(‘mysql.com’,10,3,‘cn’);insert(‘mysql.com’,7,3,‘cn’)|insert(‘mysql.com’,10,3,‘cn’)|——————————-|——————————–|mysql.cn|mysql.com|
第二个insert()函数中的pos不在有效范围之内,返回原始字符串。
REVERSE(str)函数用于将字符串str中的字符顺序进行反转。例如:
selectreverse(‘123’);reverse(‘123’)|————–|321|
MySQL提供了基于正则表达式的子串替换函数REGEXP_REPLACE(),可以实现更高复杂的功能。
15.8填充字符串LPAD(str,len,padstr)函数在字符串str的左侧使用padstr进行填充,直到长度为len;RPAD(str,len,padstr)函数在字符串str的右侧使用padstr进行填充,直到长度为len。例如:
selectlpad(‘MySQL8.0’,12,‘-’)aslpad,lpad(‘MySQL8.0’,5,‘-’)aslpad,rpad(‘MySQL8.0’,12,‘-’)asrpad,rpad(‘MySQL8.0’,5,‘-’)asrpad;lpad|lpad|rpad|rpad|————|—–|————|—–|—MySQL8.0|MySQL|MySQL8.0—|MySQL|
当字符串str的长度大于len时,相当于从右侧截断字符串。
REPEAT(str,count)函数用于将字符串str复制count次并返回结果。例如:
selectrepeat(‘’,3);repeat(‘’,3)|————–||
SPACE(N)函数返回一个由N个空格组成的字符串。例如:
selectconcat(‘my’,space(5),‘sql’)asspace;space|———-|mysql|15.9字符串比较
STRCMP(expr1,expr2)函数用于比较两个字符串。如果两者相同则返回0,如果第一个字符串小于(按照排序规则)第二个字符串则返回-1,否则返回1。例如:
selectstrcmp(‘mysql’,‘MySQL’)asstrcmp,strcmp(‘mysql’collateutf8mb4_0900_as_cs,‘MySQL’)asstrcmp;strcmp|strcmp|——|——|0|-1|
第一个函数使用utf8mb4默认的排序规则utf8mb4_0900_ai_ci,不区分大小写;第二个函数使用排序规则utf8mb4_0900_as_cs,区分大小写。
比较运算符(<、>、=、!=等)也可以直接用于比较两个字符串,例如:
select‘mysql’=‘MySQL’,‘mysql’!=‘MySQL’collateutf8mb4_0900_as_csascmp;‘mysql’=‘MySQL’|cmp|—————–|—|1|1|
除了STRCMP()函数之外,也可以使用LIKE和NOTLIKE运算符执行简单的模式匹配。
15.10Base64编码与解码TO_BASE64(str)函数用于将字符串str进行Base64编码,FROM_BASE64(str)函数用于将Base64编码后的字符串解码成二进制字符串。例如:
对了,在这里说一下,我目前是在职Java开发,如果你现在正在学习Java,了解Java,渴望成为一名合格的Java开发工程师,在入门学习Java的过程当中缺乏基础入门的视频教程,可以关注并私信我:01。获取。我这里有最新的Java基础全套视频教程。