0
点赞
收藏
分享

微信扫一扫

MySQL的字符串函数(十一)


我看到了那天的夕阳,美得如此骄艳,我便决定,追寻夕阳,拼尽余生。

上一章简单介绍了 MySQL的数学函数(十),如果没有看过,​​请观看上一章​​

一 . MySQL的字符串函数表

MySQL的字符串函数,与Java 中的字符串函数所提供的功能差不多。 MySQL的字符串函数,是非常重要的。

函数名

解释

例子

char_length(s1)

字符个数

char_length(‘1234’)

character_length(s1)

字符个数

character_length(‘1234’)

length(s1)

字符串的字节长度

length(‘abc123’)

concat(s1,s2,s3…)

连接字符串

concat(‘a’,‘b’,‘c’)

concat_ws(x,s1,s2,s3…)

拼接字符串

concat_ws(’,’,‘a’,‘b’,‘c’)

insert(s1,index,len,s2)

替换字符串

insert(‘abcd’,2,2,‘ef’)

lower(s1)

转小写

lower(‘Abd’)

lcase(s1)

转小写

lcase(‘Abc’)

upper(s1)

转大写

upper(‘Abd’)

ucase(s1)

转大写

ucase(‘Abc’)

left(str1,n)

获取最左边的字符串

left(‘abcdefg’,‘3’)

right(str1,n)

获取最右边的字符串

right(‘abcdefg’,4)

lpad(s1,len,s2)

填充左边

lpad(‘abc’,10,’*’)

rpad(s1,len,s2)

填充右边

rpad(‘abc’,10,’*’)

ltrim(s1)

左边去除空格

ltrim(’    abc’)

rtrim(s1)

右边去除空格

rtrim('abc    ')

trim(s1)

去除左右两边的空格

trim(’    abc    ')

trim(s1 from s2)

删除指定的字符串

trim(‘abc’ from ‘abcdefgd’)

repeat(s1,n)

重复生成n个字符串

repeat(‘a’,10)

space(n)

重复生成n个空格

space(10)

replace(s1,s2,s3)

替换全部的字符串

replace(‘abbaedfg’,‘b’,‘d’)

strcmp(s1,s2)

比较字符串s1,s2的大小

strcmp(‘abc’,‘abd’)

substr(s1,index,len)

截取字符串

substr(‘abcdefg’,2,5)

substring(s1,index,len)

截取字符串

substring(‘abcdefg’,2,5)

mid(s1,index,len)

截取字符串

mid(‘abcdefg’,2,5)

substring_index(str1,delimiter,num)

从第num处开始截取

substring_index(‘192.168.1.101’,’.’,2)

reverse(s1)

反转字符串

reverse(‘dcba’)

instr(s1,s2)

s2在s1中最开始出现的位置

instr(‘abcde’,‘bc’)

locate(s2,s1)

s2在s1中最开始出现的位置

locate(‘bc’,‘abcde’)

position(s2 in s1)

s2在s1中最开始出现的位置

position(‘bc’,‘abcde’)

elt(n,s1,s2,s3…)

指定位置的字符串

elt(1,‘a’,‘b’,‘c’)

field(s,s1,s2,s3…)

指定字符串所处的位置

field(‘a’,‘a’,‘b’,‘c’)

find_in_set(s1,s2)

s1在s2中的位置

find_in_set(‘a’,‘b,a,c,d,e’)

make_set(x,s1,s2,s3…)

二进制选择字符串

make_set(5,‘a’,‘b’,‘c’)

format(n,d,locale)

格式化数字型字符串

format(‘1234’,2)

ascii(s1)

s1的第一个字符的ascii码

ascii(‘ab’)

二. MySQL字符串函数

二.一 字符个数函数 char_length(s1),character_length(s1)

其中,一个多字节字符,如中文,算是一个字符。
char_length() 与character_length() 函数意义一样。

select char_length('1234'),char_length('abc123'),char_length('岳泽霖'),char_length('abc岳泽霖');

MySQL的字符串函数(十一)_字符串

二.二 字符串的字节长度 length(s1)

一个中文字符,是utf-8 编码,是3个. gbk编码,是2个. 老蝴蝶用的是gbk编码。

select length('1234'),length('abc123'),length('岳泽霖'),length('abc岳泽霖');

MySQL的字符串函数(十一)_MySQL的insert函数的使用_02

二.三 连接字符串 concat(s1,s2,s3…)

连接的时候,是直接拼接,为s1+s2+s3+… 如果列表里面有任意一个值为 null,那么就返回null.

select concat('1','2','3'),concat('abc','123'),concat('岳','泽霖'),concat('两个','蝴蝶飞'),concat('abc',null,'123');

MySQL的字符串函数(十一)_字符串_03

二.四 拼接字符串 concat_ws(x,s1,s2,s3…)

concat_ws, 就是 concat_with separator, 用分隔符连接。 是 s1+x+s2+x+s3+x…

拼接最后时,没有分隔符。 如果分隔符x为null,那么就返回null. 如果列表里面有Null值,就忽略那个为null的值。

常用的是, 进行连接。 如拼接 in语句时。

select concat_ws(',','abc','123'),concat_ws('_','两个','蝴蝶','飞'),concat_ws('*','岳','泽',null,'霖');

MySQL的字符串函数(十一)_字符串_04

二.五 替换字符串 insert(s1,index,len,s2)

将 s1字符串, 从index位置开始,len长度的 那个字符串,用s2进行代替。

MySQL默认是从1开始的。 如果 len长度过大,超过了 char_length(s1)-x, 那么就截取后面的全部数据。

select insert('abc123',1,3,'eee'),insert('两个蝴蝶飞',2,3,'岳泽霖'),insert('两个蝴蝶飞',2,10,'岳泽霖');

MySQL的字符串函数(十一)_字符串_05

二.六 转小写 lower(s1),lcase(s1)

将 s1字符串转换成小写。 如果是中文的话,那么还是中文。 lower(s1)与 lcase(s1) 用法是一样的。

select lower('abc123'),lower('AbcDef'),lower('123'),lower('两个蝴蝶飞');

MySQL的字符串函数(十一)_字符串_06

二.七 转大写 upper(s1),ucase(s1)

将s1 字符串转换成大写。 upper(s1) 与ucase() 用法是一样的。

select upper('abc123'),upper('aEdBc'),upper('两个蝴蝶飞');

MySQL的字符串函数(十一)_字符串_07

二.八 获取最左边n长度的字符串 left(s1,n)

将s1字符串,从左边数 n个长度,返回。 如果n 数值大于 char_length(s1),就全部提取。

select left('abc123',3),left('两个蝴蝶飞',4),left('岳泽霖',10);

MySQL的字符串函数(十一)_MySQL的字符串函数_08

二.九 获取最右边n长度的字符串 right(s1,n)

将s1字符串,从右边数n个长度,返回。 如果n数值大于 char_length(s1),就全部提取返回。

select right('abc123',3),right('两个蝴蝶飞',4),right('岳泽霖',10);

MySQL的字符串函数(十一)_MySQL的字符串函数_09

二.十 填充左边部分 LPAD(s1,len,s2)

对于s1字符串,如果char_length(s1)<len, 那么就在s1字符串左边连续填充字符串s2, 使填充后的字符串的长度为len.

如果 char_length(s1)>=len, 那么就从 s1字符串的左边截取len个长度的字符串,使长度变成len.

select lpad('abc123',4,'**'),lpad('abc123',6,'**'),lpad('两个蝴蝶飞',20,'*');

MySQL的字符串函数(十一)_字符串_10

二.十一 填充右边部分 RPAD(s1,len,s2)

对于s1字符串,如果char_length(s1)<len, 那么就在s1字符串右边连续填充字符串s2, 使填充后的字符串的长度为len.

如果 char_length(s1)>=len, 那么就从 s1字符串的左边截取len个长度的字符串,使长度变成len.

select rpad('abc123',4,'**'),rpad('abc123',6,'**'),rpad('两个蝴蝶飞',20,'*');

MySQL的字符串函数(十一)_MySQL的insert函数的使用_11

二.十二 删除空格 ltrim(s1),rtrim(s2),trim(s3)

ltrim() 删除的是左边的空格, rtrim() 删除的是右边的空格, trim()删除的是左右两边的空格。 但不能删除中间的空格。

不太好注意看, 用concat()函数,左右两边各连接一个 1,方便查看。

select concat('1','    两个蝴蝶飞    ','1'),concat('1',ltrim('    两个蝴蝶飞    '),'1'),
concat('1',rtrim(' 两个蝴蝶飞 '),'1'),concat('1',trim(' 两个 蝴蝶飞 '),'1');

MySQL的字符串函数(十一)_MySQL的字符串函数_12

二.十三 删除指定的字符串 trim(s1 from s2)

将s2字符串,如果左右两边的开头是s1的话,就删除s1字符串。 如果s1不指定的话,就默认删除空格。 trim(s3) 实际上就是 trim(’ ’ from s3). 不能删除中间的。 删除时,也不是只删除一次,如果s2删除掉s1之后,发现开头和结尾还是s1,那么会继续删除的。

select trim('ab' from 'abc1234ab'),trim('ab' from 'ababab123abab3dabab'),trim(' ' from '  两个蝴蝶飞   ');

MySQL的字符串函数(十一)_MySQL的字符串函数_13

二.十四 重复生成字符串 repeat(s1,n)

生成 n个s1字符串,将它进行连接。 如果 n<=0,返回空字符串, 如果 s1或者n为null,那么返回 null.

select repeat('两个蝴蝶飞',3),repeat('abc',0),repeat(null,3),repeat('abc',null);

MySQL的字符串函数(十一)_字符串_14

二.十五 空格函数 space(n)

生成 n个空格,相当于 repeat(’’,n). 是repeat()的一种特殊形式。

select concat('(',space(10),')'),char_length(space(10));

MySQL的字符串函数(十一)_MySQL的字符串函数_15

二.十六 替换字符串 replace(s1,s2,s3)

在 s1字符串中, 如果存在s2字符串,那么就将s2字符串替换为s3字符串。 注意,是全部替换。 如果s1里面,没有s2字符串,那么就不替换,仍然返回s1字符串。

select replace('abcd','ab','cd'),replace('ababCdabEfab','ab','cd'),replace('cdefg','ab','cd');

MySQL的字符串函数(十一)_MySQL的insert函数的使用_16

二.十七 比较字符串大小 strcmp(s1,s2)

strcmp 实际就是 string+compare

如果s1==s2, 就返回0. 如果s1<s2,就返回-1, s1>s2,就返回1. 按照ASCII码进行比较, 不区分大小写。

select strcmp('abc','Abc'),strcmp('abc','abcd'),strcmp('abc','abc'),strcmp('abc123','123');

MySQL的字符串函数(十一)_MySQL的insert函数的使用_17

二.十八 字符串截取 substr(str,index,len), substring(str,index,len) 和mid(str,index,len)

截取字符串。 三者的使用方式是一样的。

如果有两个参数, substr(str,index), 表示从 index处开始截取,到最后结束。

如果有三个参数, substr(str,index,len), 表示从index处开始截取,只截取 len个长度。

截取的顺序,都是从左往右截取。 其中,index可以为正,也可以为负,为负表示从后往前数。

如果 len<=0, 那么返回的是空字符串。

mysql 默认开始的位置是1.

select substr('abcdefg',3),substring('abcdefg',3,3), substring('abcdefg',-5), substring('abcdefg',-5,4);

MySQL的字符串函数(十一)_MySQL的字符串函数_18

‘abcdefg’, 正数第3个,是 c. 倒数第5个是,c

二.十九 字符串从开始位置截取 substring_index(str,delimiter,num)

截取字符串 str, 从第 num位置开始的, 以delimiter 进行截取。 如果num 为正数,就截取后展示左边的全部内容。
如果num为负数,就倒着截取,然后展示右边的全部内容。 注意,都不包括分隔符这个内容。

如果str字符串里面没有这个分隔符,就返回str

如一个ip 地址, 192.168.1.101 进行截取。

select substring_index('192.168.1.101','.',1) as 'a',substring_index('192.168.1.101','.',3) as 'b',
substring_index('192.168.1.101','.',-1) as 'c',substring_index('192.168.1.101','.','-2') as 'd',
substring_index('192.168.1.101','+',1) as 'e',substring_index('192.168.1.101','+',-1) as 'f';

MySQL的字符串函数(十一)_字符串_19

二.二十 字符串反转 reverse(s1)

将字符串反转

select reverse('abcdefg'),reverse('两个蝴蝶飞'),reverse('1234321');

MySQL的字符串函数(十一)_MySQL的字符串函数_20

二.二十一 最开始出现子字符串的位置 instr(str1,str2), locate(str2,str1) 与 position(str2 in str1)

三者的作用是一样的,都是查询子字符串最先出现的位置。

注意,str1与str2的位置。 instr与 java中的相同, locate() 与position的顺序正好相反。

如果没有找到,返回 0. 不是传说中的-1.

select instr('abcde','bcd'),locate('a','abcdefg'),position('cd' in 'abdefg');

MySQL的字符串函数(十一)_字符串_21

二.二十二 指定位置的字符串 ELT(n,str1,str2,str3…)

如果n=1, 就返回str1, n=2 返回 str2, n=3返回str3, 如果n<=0,那么返回null, 如果n> 列表的字符串数目, 也返回null

select elt(1,'a','b','c'),elt(2,'ab','bcd','c'),elt(0,'ab','ad');

MySQL的字符串函数(十一)_字符串_22

二.二十三 指定字符串的位置 FIELD(s,s1,s2,s3…)

如果s=s1,就返回1, 如果s=s2,就返回2, 如果s=s3 就返回3, 如果找不到,就返回0. 如果s为null, 那么也返回0. 0表示没有找到。

select field('a','abc','a','ac'), field('ab','ab','abc','ab'),field('a','ab','b','c'),field(null,'a','b');

MySQL的字符串函数(十一)_字符串_23

二.二十四 集合子串的位置 find_in_set(s1,s2)

s2 是一个字符串,用, 进行拼接的。 如果s2为null,如果没有找到s1,就返回0. 如果s1中值为null,就返回null.

select find_in_set('abc','a,abc,abc,ac,bc'),find_in_set('a','a,b,c,d'),
find_in_set('a','ab,ac,ad'),find_in_set('a','a,null,b,ab'),
find_in_set('a','null,a,b,ab'),find_in_set(null,'null,ac,b,ab');

MySQL的字符串函数(十一)_MySQL的字符串函数_24

注意,并不是s2中有值为null,就直接返回null了。

二.二十五 选择字符串 make_set(x,s1,s2,s3…)

首先将 数值x 变成二进制数, 将列表值按照 s1,s2,s3…的顺序排序。 变成的二进制数依次排列,如果是1,就取出来,如果是0,就跳过。 取出来的值,如果是null,就跳过不管。

select make_set(1,'abc','a','b'),make_set(3,'a','c','b'),make_set(5,'a','c','b','d'),
make_set(5,'a','b',null,'c');

MySQL的字符串函数(十一)_MySQL的字符串函数_25

1 二进制是 1, 放置在 ‘abc’,‘a’,‘b’ 里面, 取出 第一个 ‘abc’

3 二进制是11, 放置在 ‘a’,‘c’,‘b’, 取出 第一个a,和第二个c, 为 a,c

5 二进制是101, 放置在 ‘a’,‘c’,‘b’,‘d’, 取出第一个 a, 第二位是0,不取出, 第三位是1, 取出第三位的b, 为a,b

5 二进制是101, 放置在 ‘a’,‘b’,null,‘c’ ,取出第一个a,第二位是0,不取出, 第三位是1,取出null, 但null值跳过,不取,所以为 a.

二.二十六 格式化函数 format(n,d,locale)

locale默认是 ‘en_us’ . d 表示的是小数点位数。

将一个数值类型的数,格式化保留几位小数。 以###,###.## 的形式展示, 千分位展示。

n 即可以是数值类型,也可以是 数值的字符串。

select format(23,2),format('12345',3),format('123455',2),format(123455,2);

MySQL的字符串函数(十一)_MySQL的字符串函数_26

二.二十七 ASCII 码函数 ascii(s1)

字符串s1的第一个字符的 ascii码的值。只算第一个字符值。

select ascii('abc'),ascii('a'),ascii('A');

MySQL的字符串函数(十一)_MySQL的字符串函数_27

谢谢!!!


举报

相关推荐

0 条评论