首页 > 数据库 >MySQL中常用的字符串函数

MySQL中常用的字符串函数

时间:2023-07-07 11:46:57浏览次数:35  
标签:stuName 函数 instr student score str MySQL 字符串

1. 字符串拼接

concat(str1,str2,...):将str1,str2...等多个字符串拼接成一个长字符串,如果有任何一个参数为NULL,则返回值为NULL

concat_ws(separator, str1, str2, ...):指定分隔符,将多个字符串拼接成一个长字符串,如果有任何一个参数(包括分隔符)为NULL,则返回值为NULL

group_concat(distinct 要连接的字段 order by 排序字段 separator '分隔符'):搭配group by使用,将分组后产生的,属于同一个分组中的值连接起来,返回一个长字符串结果(f分隔符默认为逗号)

# 准备测试数据 --student表
CREATE TABLE `student` (
   `id` int(11) NOT NULL AUTO_INCREMENT,   #--id
   `stuName` varchar(22) DEFAULT NULL,     #--学生姓名
   `course` varchar(22) DEFAULT NULL,      #--学习科目
   `score` int(11) DEFAULT NULL,           #--学分
   PRIMARY KEY (`id`)                      #--设置主键
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
# 插入数据
INSERT INTO `student`(stuName,course,score) VALUES ('张三', '语文', '91');
INSERT INTO `student`(stuName,course,score) VALUES ('张三', '数学', '90');
INSERT INTO `student`(stuName,course,score) VALUES ('张三', '英语', '87');
INSERT INTO `student`(stuName,course,score) VALUES ('李四', '语文', '79');
INSERT INTO `student`(stuName,course,score) VALUES ('李四', '数学', '95');
INSERT INTO `student`(stuName,course,score) VALUES ('李四', '英语', '80');
INSERT INTO `student`(stuName,course,score) VALUES ('王五', '语文', '77');
INSERT INTO `student`(stuName,course,score) VALUES ('王五', '数学', '81');
INSERT INTO `student`(stuName,course,score) VALUES ('王五', '英语', '89');
# 浏览数据
mysql> select * from student;
+----+---------+--------+-------+
| id | stuName | course | score |
+----+---------+--------+-------+
| 10 | 张三    | 语文    |    91 |
| 11 | 张三    | 数学    |    90 |
| 12 | 张三    | 英语    |    87 |
| 13 | 李四    | 语文    |    79 |
| 14 | 李四    | 数学    |    95 |
| 15 | 李四    | 英语    |    80 |
| 16 | 王五    | 语文    |    77 |
| 17 | 王五    | 数学    |    81 |
| 18 | 王五    | 英语    |    89 |
+----+---------+------- +-------+
# concat_ws()函数和group_concat()搭配使用
select 
stuName as ‘姓名’,group_concat(concat_ws(':',course,score) order by score separator ',') as '成绩'
from student
group by stuName;
# 查询返回结果
+--------------+-------------------------------+
| ‘姓名’        | 成绩                          |
+--------------+-------------------------------+
| 张三          | 英语:87,数学:90,语文:91        |
| 李四          | 语文:79,英语:80,数学:95        |
| 王五          | 语文:77,数学:81,英语:89        |
+--------------+-------------------------------+ 

2. 字符串替换

insert(str,x,y,instr):将字符串 str 从第 x 位置开始,y 个字符长的子串替换为字符串instr

replace(str,x,y): 将字符串str中的x替换成y

mysql> select insert('aaaaab',2,5,1),replace('aaaaab','a',1);
+------------------------+-------------------------+
| insert('aaaaab',2,5,1) | replace('aaaaab','a',1) |
+------------------------+-------------------------+
| a1                     | 11111b                  |
+------------------------+-------------------------+

3. 字符串填充

lpad(str,x,instr):向字符串str的最左侧填充字符串instr,直到字符串长度达到x

rpad(str,x,instr):向字符串str的最右端填充字符串instr,直到字符串长度达到x

如果当原字符串的长度>给定的填充后的字符串长度,返回结果则是从左往右取x位字符

mysql> select lpad('aa',6,'b'),rpad('aa',6,'b'),lpad('aaaaaa',2,'b'),rpad('aaaaaa',2,'b');
+------------------+------------------+----------------------+----------------------+
| lpad('aa',6,'b') | rpad('aa',6,'b') | lpad('aaaaaa',2,'b') | rpad('aaaaaa',2,'b') |
+------------------+------------------+----------------------+----------------------+
| bbbbaa           | aabbbb           | aa                   | aa                   |
+------------------+------------------+----------------------+----------------------+

4. 字符串去空格/字符

trim(leading/trailing/both instr from str):去除字符串str最左端/最右端/两端的字符串instr,或者空格

ltrim(str):去除字符串左端空格

rtrim(str):去除字符串右端空格

mysql> select trim(leading 'a' from 'abca'),trim(leading 'ab' from 'abca');
+-------------------------------+--------------------------------+
| trim(leading 'a' from 'abca') | trim(leading 'ab' from 'abca') |
+-------------------------------+--------------------------------+
| bca                           | ca                             |
+-------------------------------+--------------------------------+

5. 返回字符串的最左/右端字符串

left(str,x):返回字符串str最左端x个字符

right(str,x):返回字符串str最右端x个字符

mysql> select left('abc',1),right('abc',1);
+---------------+----------------+
| left('abc',1) | right('abc',1) |
+---------------+----------------+
| a             | c              |
+---------------+----------------+

6. 截取字符串

substring(str,x,y):截取字符串str,从x开始,截取y位

mysql> select substring('abcdef',2,3):
+-------------------------+
| substring('abcdef',2,3) |
+-------------------------+
| bcd                     |
+-------------------------+

7. 查找字符串位置

instr(str,instr):查找字符串instr第一次出现的位置

locate(instr,str,pos):从pos开始查找字符串instr第一次出现的位置

position(instr in str):查找字符串str第一次出现的位置

mysql> select instr('abc','b'),locate('b','abc',1),position('b' in 'abc');
+------------------+---------------------+------------------------+
| instr('abc','b') | locate('b','abc',1) | position('b' in 'abc') |
+------------------+---------------------+------------------------+
|                2 |                   2 |                      2 |
+------------------+---------------------+------------------------+

8. 返回字符串的字符长度/字节长度

length(str):返回字符串str的字节长度。不同的字符集编码下,字符和字节的对应关系不同,在utf8规则下,一个汉字字符 =3 个字节,gbk:一个汉字字符 = 2个字节。

char_length(str):返回字符串str的字符长度。一个汉字,数字,字母或者符号就是一个字符  

# 字符集编码为utf8
mysql> select length('数据库'),char_length('数据库');
+---------------------+--------------------------+
| length('数据库')    | char_length('数据库')    |
+---------------------+--------------------------+
|                   9 |                        3 |
+---------------------+--------------------------+

9. 比较两个字符的大小

strcmp(str1,str2):比较两个字符的ascii值大小,如果str1>str2,则返回1;str1<str2,返回-1;str1=str2,返回0;

mysql> select strcmp('a','9'),strcmp('z','您');
+-----------------+-------------------+
| strcmp('a','9') | strcmp('z','您')  |
+-----------------+-------------------+
|               1 |                -1 |
+-----------------+-------------------+
1 row in set (0.00 sec)

  

  

标签:stuName,函数,instr,student,score,str,MySQL,字符串
From: https://www.cnblogs.com/zhouyang-123/p/17532668.html

相关文章

  • C++ 中的函数重载
     在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。您不能仅通过返回类型的不同来重载函数。https://www.121mu.com/bkjq211/......
  • MySQL查询语句优化方法
    1、应尽量避免在where子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。2、对查询进行优化,应尽量避免全表扫描,首先应考虑在where及orderby涉及的列上建立索引。3、应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫......
  • Mysql删除重复数据 保留一条最新数据
    --查看重复数据SELECT`item_id`,COUNT(1)FROMapp_wineGROUPBY`item_id`HAVINGCOUNT(1)>1--删除重复数据保留一条最新数据DELETEFROMapp_wineWHEREidNOTIN(SELECTt.min_idFROM(--过滤出重复多余的数据,比如,如果所有记录中存在1条记录是u......
  • 【快应用】快应用学习之页面周期函数onBackPress无法触发?
    ​【关键词】onBackPress、退出提示 【问题背景】在学习和调试快应用的过程中,我在子页面中的onBackPress()函数中定制了退出的一个弹框提醒,将它作为组件引入父页面中,弹框却无法触发?问题代码如下:子页面<template><!--Onlyonerootnodeisallowedintemplate.--><......
  • 如何实现Java ora-01861:文字与格式字符串不匹配的具体操作步骤
    Java异常解析:ora-01861:文字与格式字符串不匹配当在Java程序中使用数据库操作时,可能会遇到ora-01861:文字与格式字符串不匹配异常。这个异常是由于将一个与格式化字符串不匹配的数据插入到数据库中引起的。在本文中,我们将详细介绍这个异常的原因、解决方法以及如何避免它的发......
  • 【字符串,哈希】【Yandex】Yandex7736
    2023.6.30ProblemLink定义一个串\(S\)是好的,当且仅当\(S\)可以不断消去相邻两个相同字符直至消空。给定一个长为\(n\)的字符串\(s\),求有多少个有序对\((i,j)\)满足\(s_i\neqs_j\)且交换\(s_i,s_j\)后\(s\)是好的。技巧:镜面对称矩阵哈希,\(A^2=I\)考虑哈希,给......
  • 截取指定字符串前面或者后面的字符
    stringgddata=“af,cd”intindex=gddata.IndexOf(",");if(index>=0)//如果找到了指定字符{stringresult=gddata.Substring(0,index);//截取逗号前面的数据afstringresulet1......
  • 源码分析 | MySQL测试框架 MTR 系列教程(三):源码篇
    作者:卢文双资深数据库内核研发序言:以前对MySQL测试框架MTR的使用,主要集中于SQL正确性验证。近期由于工作需要,深入了解了MTR的方方面面,发现MTR的能力不仅限于此,还支持单元测试、压力测试、代码覆盖率测试、内存错误检测、线程竞争与死锁等功能,因此,本着分享的精神,将其......
  • 特性介绍 | MySQL测试框架 MTR 系列教程(四):语法篇
    作者:卢文双资深数据库内核研发序言:以前对MySQL测试框架MTR的使用,主要集中于SQL正确性验证。近期由于工作需要,深入了解了MTR的方方面面,发现MTR的能力不仅限于此,还支持单元测试、压力测试、代码覆盖率测试、内存错误检测、线程竞争与死锁等功能,因此,本着分享的精神,将其......
  • 正则在字符串中的简单应用
    1'''2正则表达式的方法3'''45importre#0.导入正则模块67'''81.使用re.search()方法进行搜索匹配91.预编译正则表达式模式:如果你需要多次使用同一个正则表达式模式,建议使用re.compile()方法预先编译该模式(#预编译正则表达式模式regex=re......