MySQL中常用函数之字符串函数使用详解

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: MySQL中常用函数之字符串函数使用详解

字符函数大概分为两类:大小写控制函数(LOWER,UPPER)和字符控制函数

大小写控制函数

image.png

这类函数改变字符的大小写。

字符控制函数:

  • CONCAT
  • SUBSTR
  • LENGTH
  • INSTR
  • LPAD | RPAD
  • TRIM
  • REPLACE

image.png

【1】字符串拼接函数

将字符串直接拼接起来;

CONCAT(str1,str2,...)

Navicat 实例:

select * from tb_user where user_name like CONCAT('%','演示','%')

【2】添加分隔符的字符串拼接函数

将字符串通过分隔符拼接起来;

CONCAT_WS(separator,str1,str2,...)

Navicat 实例:

select CONCAT_WS(',','123456','45','9')

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNTEwMTc0OTM0MjI2.png

contact与substr组合使用

update pm_product  set spec_sku_attribute 
=concat(substr(spec_sku_attribute,1,char_length(spec_sku_attribute)-1),
',','这里插入新值',']') where id=10610 
#substr 下标从1开始,左右均为闭区间

【3】格式化函数

不只是格式化日期

CONVERT(expr,type);
or
CAST(expr AS type)
//二者功能相似

The type can be one of the following values :

 BINARY[(N)]
 CHAR[(N)] 
 DATE  
 DATETIME 
 DECIMAL  
 SIGNED [INTEGER] 
 TIME  
 UNSIGNED [INTEGER]

Navicat 实例:

 select   
 CONVERT(SYSDATE(),datetime) as datetime ,
 CONVERT(SYSDATE(),date) as date from dual;

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNTEwMTUyNDU1NjE0.png

select cast(now() as char);
select cast((1/3)*100 as UNSIGNED) as percent from dual;
--result will be 33

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNTEwMTgwODQwNTkz.png

【4】带编码的格式化函数

`CONVERT`(expr USING transcoding_name)

Navicat 实例:

select CONVERT('duifek' USING 'utf8')

【5】字符串转日期

STR_TO_DATE(str,format)

Navicat 实例:

select 
  STR_TO_DATE('2012-02-02 12:12:12','%Y-%m-%d') as date ,
  STR_TO_DATE('2012-02-02 12:12:12','%Y-%m-%d %H:%i:%s') as datetime 
  from dual;

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNTEwMTUzMDM2MzEy.png

【6】日期格式化

日期格式化专用函数

DATE_FORMAT(date,format)

Navicat 实例:

select 
DATE_FORMAT(SYSDATE(),'%Y-%m-%d') as date,
DATE_FORMAT(SYSDATE(),'%Y-%m-%d %H:%i:%s') as datetime
from dual;

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNTEwMTYxNDI3NzAw.png

【7】字符串截取

MySQL中处理字符串时,默认第一个字符下标为1 ,而不是0。

①从左开始截取指定长度字符串

语法格式如下:

left(str, length) 

说明:left(被截取字段,截取长度)

//从左开始截取六个字符
select left('15993729750',6) from dual;


aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNDI4MTAwNzMyOTYw.png

② 从右开始截取指定长度字符串

语法格式如下:

right(str, length) 

说明:right(被截取字段,截取长度)

//从右开始截取六个字符
select right('15993729750',6) from dual;

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNDI4MTAwODM2Mjc0.png

③ 从索引位置截取字符串

substr(str, pos)

与SUBSTR(str FROM pos)功能一致

substr(str, pos, length)

与SUBSTR(str FROM pos FOR len)功能一致

说明:

substr(被截取字段,从第几位开始截取) 
substr(被截取字段,从第几位开始截取,截取长度)

实例

//从第五位开始截取字符串--包含第五位
select substr('15993729750',5) from dual;

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNDI4MTAxMTE3ODIz.png

从第五位开始截取3个字符

select substr('15993729750',5,3) from dual;

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNDI4MTAxMjMwNTg2.png

如果位数是负数 如-5 则是从后倒数位数,到字符串结束或截取的长度

select substr('15993729750',-5,3) from dual;

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNDI4MTAxNzE4NjA2.png

select substr('15993729750',-5) from dual;

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNDI4MTAyNTM5NjEx.png

③ 按关键字截取字符串

语法格式如下:

substring_index(str,delim,count) 

说明:substring_index(被截取字段,关键字,关键字出现的次数)

select SUBSTRING_INDEX('1599372123456','3','2') from dual;

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNDI4MTEwMDQyOTQ2.png

另外,MD5()函数可以在插入数据的时候进行md5加密:

select md5(SUBSTRING('1599372123456',-6)) from dual;

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNDI4MTEwNDQ0Mjg3.png

字符串截取是可以组合使用的

如下实例:

update shop_design set CATEGORY_PARAM=(
select CONCAT(substring_index(CATEGORY_PARAM,"{\"cond_type\":\"=\",\"value\":\"1\",\"name\":\"STATE\"}","1"),"\"1\"\,\"",
substr(CATEGORY_PARAM,INSTR (CATEGORY_PARAM ,"RELEASE_DATE" ))
))

INSTR (CATEGORY_PARAM ,“RELEASE_DATE” )是拿到子字符串(后面)在父字符串(前面)的下标位置。


【8】查看字符串字符集

语法格式如下

charset(str);

Navicat 实例:

select CHARSET("中国");

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNjI5MTExMzA2ODA2.png

【9】查看字符串字节长度

语法格式如下

length(str);

【10】查看字符串字符长度

语法格式如下

cha_length(str);


【11】判断字符串是否包含某个字符串

语法格式如下

INSTR (string ,substring )

示例如下:

|

返回substring首次在string中出现的位置,不存在返回0。

【12】字符串比较函数

字符串比较是逐字符比较,不区分大小写。

select STRCMP ("中国你好" ,"中国你好" ) ;

相等返回0;大于返回 1 ;小于 返回 -1 。

13】lpad (str ,length ,pad )

左填充,将字符串按照某个指定的填充方式,填充到指定长度(字符,即中英无关)。

即,重复用pad加在string开头,直到字串长度为length。

 select  lpad ('hello' ,11 ,'ar' ),lpad ('hello' ,11 ,'国' );

同样存在的还有右填充,rpad (string2 ,length ,pad ),其他说明同上。


【14】LCASE(string)

将字符串转换为小写。

select  LCASE('ABC'),LCASE('abcd'),LCASE('abDEd')



aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNzA1MDk0OTI5NTA4.png

将字符串转换成大写如下:

select ucase(' abc '),UCASE('aBC')

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNzA1MTAwNDUxMjY2.png

【15】去除字符串两端空格

只能去掉两端,不能去掉中间。

SELECT TRIM(' a b c ');
or
SELECT trim(' ' FROM ' a b c ');

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNzA1MDk1NDQzNTgx.png

【16】去除字符串所有空格

语法格式如下:

`REPLACE`(str,from_str,to_str);
-- 不只是可以去掉所有空格,replace函数意思用指定to_str替换掉字符串中所有的from_str.

示例如下:

SELECT replace(' a b c ',' ','');

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNzA1MDk1NzQ4NTI5.png

【17】去除左端空格

语法格式如下:

LTRIM(str)

示例如下:

select ltrim(' abc ');

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNzA1MTAwMTUyODU2.png

去除右端空格同上,rtrim(' abc ')

于此,也可实现去除字符串两端空格。

 select RTRIM(LTRIM(' abc '));
 or
  select LTRIM(RTRIM(' abc '));

同样的问题,不能去除字符串内部的空格。


【18】去除指定位置字符串。

TRIM([[BOTH|LEADING|TRAILING] [str]FROM]string);

both : 从字符串两端去除指定str;

leading:从左(前)端去除指定str;

trailing:从右(后)端去除指定str;

both:

SELECT trim(both ' ' FROM ' a b c ');
SELECT RTRIM(LTRIM(' a b c '));
SELECT trim(' a b c ');

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNzA1MTAyNTQ3Mzc2.png

leading

SELECT TRIM(LEADING ' ' FROM ' a b c '),LTRIM(' a b c ');


aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNzA1MTAyNzEzNTgx.png

trailing

SELECT TRIM(trailing ' ' FROM ' a b c '),RTRIM(' a b c ');

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNzA1MTAyODIwMzY5.png

【19】LOCATE (substr,str[,position])

从指定位置开始判断字符串中是否存在某个字符串,默认从index=1(第一位)开始查找。

若有,返回index;若无,返回 0。

select LOCATE('abc','abcagabcde'),LOCATE('abc','abcagabcde',2);

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNzA1MTAzNDIwODAy.png

【20】REPEAT(str,count )

将字符串重复count次。

select REPEAT('abc',3)

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNzA1MTAzNTQ1MzQy.png

【21】space(count)

生成count个空格。

SELECT concat('abc',repeat(' ',3),'d',SPACE(0));

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNzA1MTAzODUyMDEz.png

【22】LOAD_FILE(fileName)

读取指定路径下的文件到内存。

SELECT LOAD_FILE('D:/temDirectory/backup.txt') ;

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNzA1MTEwNDM4NjMy.png

【23】insert(str,pos,len,newstr)

select 
insert('abcdefg',3,3,'中国人好'),-- 从index开始的三个字符被newstr替换
insert('abcdefg',30,3,'中国人好'),-- index大于字符串长度,返回原字符串
insert('abcdefg',3,30,'中国人好'),-- 从index开始的所有字符被newstr替换
insert('abcdefg',null,3,'中国人好'),-- index 为null 返回null 
insert('abcdefg',3,null,'中国人好'),-- pos 为null 返回null
insert('abcdefg','',3,'中国人好'),-- 无index 返回原字符串
insert('abcdefg','','','中国人好'),-- 无index 无pos 返回原字符串
insert('abcdefg',3,'','中国人好');-- 从index开始的位置插入newstr

aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNzA1MTEzNTE2NDkz.png

【24】replace

字符替换:

replace(字段名,需要替换的字符串,目标字符串)


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2天前
|
SQL 关系型数据库 MySQL
【MySQL基础篇】盘点MySQL常用四大类函数
本文介绍了MySQL中的四大类常用函数:字符串函数、数值函数、日期函数和流程函数。
【MySQL基础篇】盘点MySQL常用四大类函数
|
18天前
|
SQL 关系型数据库 MySQL
MySQL常见函数第二期,你都用过哪些呢 ?
本期介绍了20个常用的MySQL函数,涵盖日期处理(如CURDATE()、DATE_FORMAT())、数学运算(如ABS()、ROUND())、统计分析(如COUNT()、SUM())等,帮助提高SQL查询效率和数据处理能力。希望对大家的学习有所帮助。
59 7
|
20天前
|
关系型数据库 MySQL
MySQL常见函数第一期,你都用过哪些呢 ?
本期介绍10个常用的MySQL函数:字符串连接(CONCAT)、提取子字符串(SUBSTRING)、获取字符串长度(LENGTH)、转换大小写(UPPER、LOWER)、去除空格(TRIM)、替换字符串(REPLACE)、查找子字符串位置(INSTR)、带分隔符的字符串连接(CONCAT_WS)以及获取当前日期时间(NOW)。
56 8
|
21天前
|
数据采集 关系型数据库 MySQL
MySQL常用函数:IF、SUM等用法
本文介绍了MySQL中常用的IF、SUM等函数及其用法,通过具体示例展示了如何利用这些函数进行条件判断、数值计算以及复杂查询。同时,文章还提到了CASE WHEN语句和其他常用函数,如COUNT、AVG、MAX/MIN等,强调了它们在数据统计分析、数据清洗和报表生成中的重要性。
|
25天前
|
关系型数据库 MySQL 数据处理
【MySQL】函数
MySQL 提供了丰富的函数集,涵盖字符串处理、数值运算、日期时间操作和聚合计算等多个方面。这些函数在日常数据库操作中极为重要,通过合理使用这些函数,可以大大提高数据处理和查询的效率。用户还可以通过自定义函数,扩展 MySQL 的功能以满足特定需求。
28 3
|
27天前
|
关系型数据库 MySQL 数据处理
MySQL函数与约束
MySQL 提供了丰富的函数和强大的约束机制,用于数据处理和完整性维护。通过掌握这些工具,可以有效地管理和分析数据库中的数据,确保数据的一致性和准确性。无论是在日常数据查询中使用内置函数,还是在数据库设计中应用各种约束,都是确保数据库系统稳定、高效运行的关键。希望本文对您理解和应用 MySQL 函数与约束有所帮助。
31 1
|
1月前
|
关系型数据库 MySQL
MySQL中的字符串函数有哪些?
本文介绍了几个常用的字符串函数,包括计算字符串字符数的`CHAR_LENGTH`、计算字符串长度的`LENGTH`、合并字符串的`CONCAT`和`CONCAT_WS`、替换字符串的`INSERT`,以及字母大小写转换的`LOWER`、`LCASE`、`UPPER`和`UCASE`。每个函数都有详细的说明和示例。
MySQL中的字符串函数有哪些?
|
1月前
|
关系型数据库 MySQL Serverless
MySQL函数
最常用的MySQL函数,包括聚合函数,字符串函数,日期时间函数,控制流函数等
37 1
|
1月前
|
SQL NoSQL 关系型数据库
|
2月前
|
关系型数据库 MySQL 数据库
mysql中tonumber函数使用要注意什么
在处理这类转换操作时,考虑周全,利用提供的高性能云服务器资源,可以进一步提升数据库处理效率,确保数据操作的稳定性和安全性,尤其是在处理大量数据转换和运算密集型应用时。
125 0