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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 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(字段名,需要替换的字符串,目标字符串)


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
关系型数据库 MySQL Serverless
MYSQL数字函数:不可不知的数据处理利器
MYSQL数字函数是数据处理的得力助手,高效、准确且灵活。从基础数学运算到复杂数据转换,如ROUND、CEILING、FLOOR等,它们都能轻松胜任。ROUND函数实现数据四舍五入,而CEILING和FLOOR则分别进行向上和向下取整。这些函数不仅提升数据处理效率,还保障数据精确性和一致性。在数据分析、报表生成及业务逻辑处理中,MYSQL数字函数均扮演关键角色。对于数据处理开发者而言,熟练掌握这些函数是不可或缺的技能,它们将极大助力工作并提升职业竞争力。
64 0
|
2月前
|
关系型数据库 MySQL 索引
936. 【mysql】locate函数
936. 【mysql】locate函数
22 2
|
2月前
|
SQL 关系型数据库 MySQL
927. 【mysql】coalesce 函数
927. 【mysql】coalesce 函数
27 3
|
2月前
|
关系型数据库 MySQL
926.【mysql】 date 函数
926.【mysql】 date 函数
75 3
|
2月前
|
关系型数据库 MySQL
925. 【mysql】convert 函数
925. 【mysql】convert 函数
24 3
|
3月前
|
关系型数据库 MySQL 索引
mysql常见函数
mysql常见函数
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
31 0
|
2月前
|
SQL 存储 关系型数据库
【MySQL技术专题】「实战开发系列」一同探索一下数据库的加解密函数开发实战指南之AES系列
【MySQL技术专题】「实战开发系列」一同探索一下数据库的加解密函数开发实战指南之AES系列
46 0
|
1天前
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之在DataWorks中,使用JSON解析函数将MySQL表中的字段解析成多个字段将这些字段写入到ODPS(MaxCompute)中如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
8 3
|
16天前
|
SQL 关系型数据库 MySQL
DQL语言之常见函数(mysql)
DQL语言之常见函数(mysql)