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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 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(字段名,需要替换的字符串,目标字符串)


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
9月前
|
SQL 关系型数据库 MySQL
MySQL 常用函数
我们这次全面梳理 MySQL 中的常用函数,涵盖 聚合函数、字符串函数、日期时间函数、数学函数 和 控制流函数 等五大类。每类函数均配有语法说明与实用示例,帮助读者提升数据处理能力,如统计分析、文本处理、日期计算、条件判断等。文章结尾提供了丰富的实战练习,帮助读者巩固和应用函数技巧,是进阶 SQL 编程与数据分析的实用工具手册。
620 2
|
11月前
|
关系型数据库 MySQL Serverless
MySQL字符串函数使用技巧
本文为您提供了多个有趣的示例,引导您更深入地了解如何使用MySQL字符串函数。希望这些知识能帮助您更高效地操作数据库。
263 13
|
12月前
|
SQL 关系型数据库 MySQL
【YashanDB知识库】MySQL field 函数的改写方法
【YashanDB知识库】MySQL field 函数的改写方法
|
SQL 关系型数据库 MySQL
Mysql-常用函数及其用法总结
以上列举了MySQL中一些常用的函数及其用法。这些函数在日常的数据库操作中非常实用,能够简化数据查询和处理过程,提高开发效率。掌握这些函数的使用方法,可以更高效地处理和分析数据。
384 19
|
SQL 关系型数据库 MySQL
【MySQL基础篇】盘点MySQL常用四大类函数
本文介绍了MySQL中的四大类常用函数:字符串函数、数值函数、日期函数和流程函数。
【MySQL基础篇】盘点MySQL常用四大类函数
|
12月前
|
SQL 关系型数据库 MySQL
【YashanDB知识库】MySQL field 函数的改写方法
本文来自YashanDB官网,介绍将MySQL的FIELD函数改写到YashanDB的方法。MySQL中,FIELD函数用于自定义排序;而在YashanDB中,可使用DECODE或CASE语句实现类似功能。示例展示对表`t1`按指定顺序排序的过程,提供两种改写方式,结果均符合预期。
|
数据采集 关系型数据库 MySQL
MySQL常用函数:IF、SUM等用法
本文介绍了MySQL中常用的IF、SUM等函数及其用法,通过具体示例展示了如何利用这些函数进行条件判断、数值计算以及复杂查询。同时,文章还提到了CASE WHEN语句和其他常用函数,如COUNT、AVG、MAX/MIN等,强调了它们在数据统计分析、数据清洗和报表生成中的重要性。
|
关系型数据库 MySQL
MySQL常见函数第一期,你都用过哪些呢 ?
本期介绍10个常用的MySQL函数:字符串连接(CONCAT)、提取子字符串(SUBSTRING)、获取字符串长度(LENGTH)、转换大小写(UPPER、LOWER)、去除空格(TRIM)、替换字符串(REPLACE)、查找子字符串位置(INSTR)、带分隔符的字符串连接(CONCAT_WS)以及获取当前日期时间(NOW)。
336 8
|
SQL 关系型数据库 MySQL
MySQL常见函数第二期,你都用过哪些呢 ?
本期介绍了20个常用的MySQL函数,涵盖日期处理(如CURDATE()、DATE_FORMAT())、数学运算(如ABS()、ROUND())、统计分析(如COUNT()、SUM())等,帮助提高SQL查询效率和数据处理能力。希望对大家的学习有所帮助。
350 7
|
关系型数据库 MySQL 数据处理
【MySQL】函数
MySQL 提供了丰富的函数集,涵盖字符串处理、数值运算、日期时间操作和聚合计算等多个方面。这些函数在日常数据库操作中极为重要,通过合理使用这些函数,可以大大提高数据处理和查询的效率。用户还可以通过自定义函数,扩展 MySQL 的功能以满足特定需求。
291 3

推荐镜像

更多