文章来源:https://blog.csdn.net/horses/article/details/107487470

原文作者:不剪发的Tony老师

来源平台:CSDN

上一篇讨论了 MySQL 中常用的数学函数,本篇我们介绍常用的 MySQL 字符函数。

字符函数和运算符用于对字符串数据进行处理和分析并返回一个结果。以下是 MySQL 中常见的字符函数和运算符:

下面我们通过一些示例来说明这些函数的作用。

15.1 字符与编码转换

ASCII(str) 函数返回字符串 str 第一个字符对应的 ASCII 编码;如果 str 是空字符串,返回 0;如果 str 为 NULL,返回 NULL。例如:

select ascii('ABC'), ascii(''), ascii(null);ascii('ABC')|ascii('')|ascii(null)|------------|---------|-----------|          65|        0|           |

ORD(str) 函数与 ASCII(str) 函数类似,但是对于多字节编码的字符返回的编码计算方式如下:

  (1st byte code)+ (2nd byte code * 256)+ (3rd byte code * 256^2) ...

例如:

select ord('ABC'), ord('你好');ord('ABC')|ord('你好')|----------|-----------|        65|   14990752|

字符“A”属于单字节编码,返回的是 ASCII 码;字符“你”属于 UTF-8 中的三字节编码,返回的是它的编码的十进制结果。

CHAR(N,… [USING charset_name]) 函数返回每个编码 N 对应的字符,忽略其中的 NULL 参数。例如:

select char(77, 121, 83, 81, '76');char(77, 121, 83, 81, '76')|---------------------------|MySQL                      |

默认情况下,CHAR() 函数返回的是二进制字符串,USING 子句可以将结果转换为相应的字符集:

select charset(char(65)), charset(char(65 using utf8mb4));charset(char(65))|charset(char(65 using utf8mb4))|-----------------|-------------------------------|binary           |utf8mb4                        |

charset() 函数用于返回字符串的字符集。

15.2 获取字符串长度

BIT_LENGTH(str) 函数返回字符串的比特长度(数量),CHAR_LENGTH(str)CHARACTER_LENGTH(str) 函数返回字符串的字符长度(数量),LENGTH(str)OCTET_LENGTH(str) 函数返回字符串的字节长度。例如:

select bit_length('你'), char_length('你'), length('你');bit_length('你')|char_length('你')|length('你')|---------------|----------------|-----------|             24|               1|          3|

字符“你”在 utf8mb4 字符集中占用 24 个比特,3 个字节。

15.3 连接字符串

CONCAT(str1,str2,…)) 函数用于返回多个字符串连接之后的字符串,任何参数为 NULL 则返回 NULL。例如:

select concat('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。例如:

select concat_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) 函数用于将字符串转换为小写形式。例如:

select lower('MySQL'), lcase('MySQL');lower('MySQL')|lcase('MySQL')|--------------|--------------|mysql         |mysql         |

UPPER(str)UCASE(str) 函数用于将字符串转换为大写形式。例如:

select upper('MySQL'), ucase('MySQL');upper('MySQL')|ucase('MySQL')|--------------|--------------|MYSQL         |MYSQL         |

以上大小写转换函数不支持二进制字符串(BINARY、VARBINARY、BLOB)),可以将其转换为非二进制的字符串之后再进程处理。例如:

select lower(binary 'MySQL'), lower(CONVERT(binary 'MySQL' USING utf8mb4));lower(binary 'MySQL')|lower(CONVERT(binary 'MySQL' USING utf8mb4))|---------------------|--------------------------------------------|MySQL                |mysql                                       |

15.5 查找子串位置

INSTR(str,substr) 函数返回子串 substr 在字符串 str 中第一次出现的索引位置,没有找到子串时返回 0。例如:

select instr('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 开始第一次出现的索引位置。例如:

select locate('SQL', 'MySQL'), locate('SQL', 'MySQL vs PostgreSQL', 6);locate('SQL', 'MySQL')|locate('SQL', 'MySQL vs PostgreSQL', 6)|----------------------|---------------------------------------|                     3|                                     17|

第二个 locate() 函数从第 6 个字符开始查找子串“SQL”。

MySQL 提供了基于正则表达式的子串位置查找函数 REGEXP_INSTR(),可以实现更高复杂的功能。

FIELD(str,str1,str2,str3,…) 函数返回字符串 str 在后续字符串列表中出现的位置,没有找到时返回 0。例如:

select field('Friday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday') as dow;dow|---|  5|

FIND_IN_SET(str,strlist) 函数返回字符串 str 在列表字符串 strlist 中出现的位置,strlist 由 N 个子串使用逗号分隔组成。例如:

select find_in_set('Friday', 'Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday') as dow;dow|---|  5|

15.6 返回子串

SUBSTRING(str,pos)SUBSTRING(str FROM pos)SUBSTRING(str,pos,len) 以及 SUBSTRING(str FROM pos FOR len) 函数都可以用于返回从指定位置 pos 开始的子串,len 表示返回子串的长度;pos 为 0 表示返回空字符串。例如:

select substring('MySQL', 3), substring('MySQL' from 3 for 3), substring('MySQL', 0);substring('MySQL', 3)|substring('MySQL' from 3 for 3)|substring('MySQL', 0)|---------------------|-------------------------------|---------------------|SQL                  |SQL                            |                     |

位置参数 pos 可以为负数,此时返回的子串从字符串右侧第 pos 个字符开始。例如:

select substring('MySQL', -5, 2), substring('MySQL' from -3);substring('MySQL', -5, 2)|substring('MySQL' from -3)|-------------------------|--------------------------|My                       |SQL                       |

SUBSTR() 和 **MID()**函数是 SUBSTRING() 函数的同义词,也支持以上 4 种形式。例如:

select substr('MySQL', 3), mid('MySQL' from 3 for 3);substr('MySQL', 3)|mid('MySQL' from 3 for 3)|------------------|-------------------------|SQL               |SQL                      |

SUBSTRING_INDEX(str,delim,count) 函数返回第 count 次出现的分隔符 delim 之前的子串。如果 count 为正数,从左侧开始计数并返回左侧的所有字符;如果 count 为正数,从右侧开始计数并返回右侧的所有字符。例如:

select substring_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 个字符。例如:

select left('MySQL', 2), right('MySQL', 3);left('MySQL', 2)|right('MySQL', 3)|----------------|-----------------|My              |SQL              |

LTRIM(str) 函数返回删除字符串 str 左侧所有空格之后的子串,RTRIM(str) 函数返回删除字符串 str 右侧所有空格之后的子串。例如:

select ltrim('  my sql  ') as lt, rtrim('  my sql  ') as rt;lt      |rt      |--------|--------|

TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)TRIM([remstr FROM] str) 函数返回删除字符串 str 两侧/左侧/右侧所有 remstr 字符串之后的子串,默认删除两侧字符串(BOTH),remstr 默认为空格。例如:

select trim('  my sql  ') as tr, trim(both '1' from '111mysql111') as tr;tr    |tr   |------|-----|my sql|mysql|

ELT(N,str1,str2,str3,…) 函数返回字符串列表中的第 N 个元素,如果 N 的值小于 1 或者大于列表中的字符个数则返回 NULL。例如:

select elt(7, 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday') as dow;dow   |------|Sunday|

15.7 替换子串

REPLACE(str,from_str,to_str) 函数用于将字符串 str 中的所有 from_str 替换为 to_str,返回替换后的字符串。例如:

select replace('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 个字符。例如:

select insert('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 中的字符顺序进行反转。例如:

select reverse('123');reverse('123')|--------------|321           |

MySQL 提供了基于正则表达式的子串替换函数 REGEXP_REPLACE(),可以实现更高复杂的功能。

15.8 填充字符串

LPAD(str,len,padstr) 函数在字符串 str 的左侧使用 padstr 进行填充,直到长度为 len;RPAD(str,len,padstr) 函数在字符串 str 的右侧使用 padstr 进行填充,直到长度为 len。例如:

select lpad('MySQL 8.0', 12,'-') as lpad, lpad('MySQL 8.0', 5,'-') as lpad,       rpad('MySQL 8.0', 12,'-') as rpad, rpad('MySQL 8.0', 5,'-') as rpad;lpad        |lpad |rpad        |rpad |------------|-----|------------|-----|---MySQL 8.0|MySQL|MySQL 8.0---|MySQL|

当字符串 str 的长度大于 len 时,相当于从右侧截断字符串。

REPEAT(str,count) 函数用于将字符串 str 复制 count 次并返回结果。例如:

select repeat('', 3);repeat('', 3)|--------------|        |

SPACE(N) 函数返回一个由 N 个空格组成的字符串。例如:

select concat('my', space(5), 'sql') as space;space     |----------|my     sql|

15.9 字符串比较

STRCMP(expr1,expr2) 函数用于比较两个字符串。如果两者相同则返回 0,如果第一个字符串小于(按照排序规则)第二个字符串则返回 -1,否则返回 1。例如:

select strcmp('mysql', 'MySQL') as strcmp, strcmp('mysql' collate utf8mb4_0900_as_cs, 'MySQL') as strcmp;strcmp|strcmp|------|------|     0|    -1|

第一个函数使用 utf8mb4 默认的排序规则 utf8mb4_0900_ai_ci,不区分大小写;第二个函数使用排序规则 utf8mb4_0900_as_cs,区分大小写。

比较运算符(、=、!= 等)也可以直接用于比较两个字符串,例如:

select 'mysql' = 'MySQL', 'mysql' != 'MySQL' collate utf8mb4_0900_as_cs as cmp;'mysql' = 'MySQL'|cmp|-----------------|---|                1|  1|

除了 STRCMP() 函数之外,也可以使用 LIKE 和 NOT LIKE 运算符执行简单的模式匹配。

15.10 Base64 编码与解码

TO_BASE64(str) 函数用于将字符串 str 进行 Base64 编码,FROM_BASE64(str) 函数用于将 Base64 编码后的字符串解码成二进制字符串。例如:

对了,在这里说一下,我目前是在职Java开发,如果你现在正在学习Java,了解Java,渴望成为一名合格的Java开发工程师,在入门学习Java的过程当中缺乏基础入门的视频教程,可以关注并私信我:01。获取。我这里有最新的Java基础全套视频教程。

concat函数_《MySQL 入门教程》第15篇MySQL常用函数之字符函数相关推荐

  1. mysql入门教程——基本操作

    MySQL入门教程--基本操作 一.MySQL基础 1.数据库介绍 2.mysql安装和配置 3.超管密码修改 二.数据库的操作 1.SQL语句 2.数据库操作 2.1.查询数据库 2.2.创建数据库 ...

  2. Mysql学习总结(12)——21分钟Mysql入门教程

    21分钟 MySQL 入门教程 目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数 ...

  3. mysql怎么滤空_《MySQL 入门教程》第 08 篇 过滤条件

    文章来源:<MySQL 入门教程>第 08 篇 过滤条件 原文作者:不剪发的Tony老师 来源平台:CSDN 上一篇我们学习了如何使用 SELECT 和 FROM 查询表中的数据.很多时候 ...

  4. 32位mysql安装包_《MySQL 入门教程》第 02 篇 MySQL 安装

    文章来源:<MySQL 入门教程>第 02 篇 MySQL 安装 原文作者:不剪发的Tony老师 来源平台:CSDN 上一篇我们了解了什么是MySQL数据库. 本文介绍如何在 Window ...

  5. 超详细的MySQL入门教程(四)

    MySQL:简单的增删改查 查询数据 基本语法介绍 打印任意值 查询表中全部数据 查询表中部分字段 限定条件查询 例1:查询编号值小于指定值的记录 例2:查询地址不等于某值的记录 例3:查询一级地址等 ...

  6. 视频教程-Access2013数据库入门教程3查询部分-MySQL

    Access2013数据库入门教程3查询部分 十几年管理软件开发实战经验.从事IT行业十 余年,多年IT技术培训经验,课程编排重在实用 ,讲解通俗易懂. 王西猛 ¥39.00 立即订阅 扫码下载「CS ...

  7. 视频教程-Access2013数据库入门教程2窗体部分-MySQL

    Access2013数据库入门教程2窗体部分 十几年管理软件开发实战经验.从事IT行业十 余年,多年IT技术培训经验,课程编排重在实用 ,讲解通俗易懂. 王西猛 ¥39.00 立即订阅 扫码下载「CS ...

  8. Mysql入门教程--基础命令

    Mysql入门教程--基础命令 #mysql ----------------------------------------------------------------------------- ...

  9. WMI 使用教程_.NET 入门教程

    WMI 使用教程_.NET 入门教程 先介绍一下WMI 相关知识:  什么是WMI 呢? Windows 管理规范 (Windows Management Instrumentation ),它的主要 ...

  10. 视频教程-Access2013数据库入门教程4报表部分-MySQL

    Access2013数据库入门教程4报表部分 十几年管理软件开发实战经验.从事IT行业十 余年,多年IT技术培训经验,课程编排重在实用 ,讲解通俗易懂. 王西猛 ¥39.00 立即订阅 扫码下载「CS ...

最新文章

  1. python设计模式(九):外观模式
  2. CSS命名规范参考及书写注意事项(下)
  3. HNOI2019游记
  4. (二十六)、Java数组在内存中如何存放与分配
  5. 手机当电脑音响_hifi迷你组合音响怎么样 hifi迷你组合音响优势简介【详解】
  6. find -mtime时间算法
  7. Java 给编译器看的注释--Annotation
  8. 哈希表数据结构_Java数据结构哈希表如何避免冲突
  9. Python数据分析模块 | pandas做数据分析(三):统计相关函数
  10. 个人博客作业-Week2 (代码规范, 代码复审)
  11. Process finished with exit code 1
  12. Nginx监控数据采集与分析
  13. #快餐店工资计算流程
  14. matlab tiff 压缩方式,无法打开以这种方式压缩的tiff文件(2) - imageJ / FIJI
  15. 单片机温度传感器c语言编码,温度传感器代码解析Ⅱ
  16. Emily姨妈家的猫
  17. 新版标准日本语中级_第十八课
  18. 一些实用高效的装机软件汇总
  19. VB.NET连接FireBird(整理最全)
  20. 频偏纠正matlab实现,频偏估计matlab代码

热门文章

  1. Ubuntu18.04 Ceres Solver
  2. python结果四舍五入保留两位小数_python中四舍五入的正确打开方式
  3. “四通一达”本一家,这家人是如何“承包”中国快递半壁江山的?
  4. nfc卡模式与标准模式_解析目前NFC具有的三种工作模式
  5. 【python】python语法糖
  6. 等比数列求和python_numpy的logspace产生等比数列
  7. c++11 之emplace_back 与 push_back的区别
  8. 解决SSLHandshakeException :sun.security.validator.ValidatorException: PKIX path building failed:
  9. 举个栗子!Tableau技巧(61):学做三个集合的维恩图(文氏图)Venn diagram
  10. 把一个人的特点写具体作文_五年级把一个人的特点写具体作文500字5篇