MySQL 中的字符串函数

字符串函数:https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_unhex

长度

  • CHAR_LENGTH(str):返回字符串str的所包含字符个数
  • LENGTH(str)返回字符串的字节长度
SELECT CHAR_LENGTH('asdfg')
-- 5
SELECT CHAR_LENGTH('东方饭店')
-- 4
SELECT LENGTH('asdfg')
-- 5
SELECT LENGTH('东方饭店')
-- 12(一个汉字是三个字节)

拼接

  • CONCAT(s1, s2, s3, …):将s1,s2,s3,…拼接,如果有参数为null,则返回null。
  • CONCAT_WS(x, s1, s2, s3, …):第一个参数x是其它参数的分隔符,分隔符的位置放在要连接的两个字符串之间,忽略null。
SELECT CONCAT(110, 1321, 2432)
-- 11013212432
SELECT CONCAT('www', 'huya', 'com')
-- wwwhuyacom

SELECT CONCAT_WS(11, 2323, 4545)
-- 2323114545
SELECT CONCAT_WS('@', 'www', 'huya', 'com')
-- www@huya@com

截取

  • LEFT(s,n):返回字符串s开始的最左边n个字符
  • RIGHT(s,n):返回字符串s最右边n字符
SELECT LEFT('abcdefg', 3)
-- abc
SELECT RIGHT('abcdefg', 4)
-- defg
  • MID(), SUBSTR(), SUBSTRING() 效果相同
    SUBSTR(str, n, len)
    截取字符串str,起始于位置n,长度是len。若len省略,截取n及之后的字符串。n为负数时,是倒着数,但返回结果是正常顺序。
SELECT SUBSTR('11012342325', 4, 4)
-- 1234
SELECT SUBSTR('11012342325', 4)
-- 12342325
SELECT SUBSTR('11012342325', -4, 4)
-- 2325
SELECT SUBSTR('11012342325', -5)
-- 42325
  • SUBSTRING_INDEX(str, s, n):返回字符s在str中第n次出现位置之前的字符串
SELECT SUBSTRING_INDEX('www.youku.com.cn', '.', -2)
-- com.cn
SELECT SUBSTRING_INDEX('www.youku.com.cn', '.', -1)
-- cn
SELECT SUBSTRING_INDEX('www.youku.com.cn', '.', 1)
-- www
SELECT SUBSTRING_INDEX('www.youku.com.cn', '.', 2)
-- www.youku

查找

  • FIELD(str, str1, str2, str3,…)
    返回str在字符串列表(str1, str2, str3,…)中的位置索引,没找到就返回0
    如果所有参数是字符串,则作为字符串进行比较。如果所有参数是数字,则将它们作为数字进行比较
SELECT FIELD('abc', 'acd', 'abb', 'abc', 'bbc')
-- 3
SELECT FIELD('a', 'ab', 'ac', 'aac', 'bbc')
-- 0
  • FIND_IN_SET(str, strlist)
    如果str在strlist中 ,则返回1到N范围内的值 。字符串列表是由以字符分隔的子字符串组成的字符串
SELECT FIND_IN_SET('a', 'fdgdag')
-- 0
SELECT FIND_IN_SET('a', 'bbacca')
-- 0
SELECT FIND_IN_SET('a', 'b,b,a,b')
-- 3
SELECT FIND_IN_SET('a', 'b, b, a, b')
-- 0
  • INSTR(str, s1)
    返回字符串str中第一次出现子字符串s1的位置
SELECT INSTR('foobarba', 'ba');
-- 4
SELECT INSTR('cation', 'o');
-- 5
  • POSITION(s1 IN str)
    返回子串 s1 在字符串 str 中第一次出现的位置,如果字符substr在字符串str中不存在,与LOCATE函数作用相同
  • LOCATE(s1, str, p)
    从p位置开始向右查找,返回子字符串s1在 str 中第一次出现的位置。如果字符s1不在字符串str中,则返回0。参数p可以不写
SELECT LOCATE('ba', 'foobarba')
-- 4
SELECT LOCATE('xbar', 'foobar')
-- 0
SELECT LOCATE('ba', 'foobarba', 5)
-- 7
  • FORMAT(X, n)
    将数字X格式化为 ‘#,###,###.##’,四舍五入到n小数位,并将结果作为字符串返回。如果D是 0,则结果没有小数点或小数部分
SELECT FORMAT(12343321.123456, 4)
-- 12,343,321.1235

SELECT FORMAT(12332.2, 0)
-- 12,332
  • ELT(n, str1, str2, str3,…)
    返回字符串列表的第n个元素: str1if n=1、 str2if n=2等。NULL如果n小于1 或大于参数的数量, 则返回ELT()的补码
SELECT ELT(2, 'www', 'youku', 'com', 'cn')
-- youku
SELECT ELT(3, 'www', 'youku', 'com', 'cn')
-- com

一个没看懂的函数:EXPORT_SET()
https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_export-set

SELECT EXPORT_SET(1, '123', 'abc', 'ABC', 4),  EXPORT_SET(2, '123', 'abc', 'ABC', 4),  EXPORT_SET(3, '123', 'abc', 'ABC', 4)
-- 123ABCabcABCabcABCabc		abcABC123ABCabcABCabc		123ABC123ABCabcABCabc

SELECT EXPORT_SET(4,'Y','N',',',4), EXPORT_SET(5,'Y','N',',',4);
-- N,N,Y,N     Y,N,Y,N

SELECT EXPORT_SET(6,'1','0','@',10)
-- 0@1@1@0@0@0@0@0@0@0

一个用处不大的函数:SPACE(N),返回由N 空格字符组成的字符串。例如 SELECT SPACE(5),结果是5个空格

增加

插入

  • INSERT(s1, n, len, s2):
    在位置n起始的子串且len个字符长的子串由字符串s2代替。 若s2为空字符,结果就变成删除。
SELECT INSERT(12345678, 2, 15, 'asd')
-- 1asd
SELECT INSERT(12345678, 2, 3, 'asd')
-- 1asd5678
SELECT INSERT(12345678, 2, 15, 'asdweqwewq')
-- 1asdweqwewq 
SELECT INSERT(12345678, 2, 3, 'asdweqwewq')
-- 1asdweqwewq5678

填充

  • LPAD(s1, len, s2):返回字符串s1,其左边由字符串s2填补到len字符长度
  • RPAD(s1, len, s2):返回字符串s1,其右边被字符串s2填补至len字符长度
SELECT LPAD('abc', 10, '*')
-- *******abc
SELECT RPAD('abc', 10, '*')
-- abc*******

替换

  • 字符串逆序函数REVERSE(s):将字符串s反转,返回的字符串的顺序和s字符顺序相反。

REPEAT(str, n):返回由字符串str重复n次数组成的字符串。如果n小于1,则返回一个空字符串

SELECT REPEAT('CAD', 3)
-- CADCADCAD

REPLACE(str, s1, s2):将str字符串中的s1字符替换成s2。

SELECT REPLACE('aaahuyacn', 'a', 'w')
-- wwwhuywcn
  • 比较字符串大小
    STRCMP(s1,s2):若所有的字符串均相同,则返回0,若根据当前分类次序,第一个参数小于第二个,则返回-1,其它情况返回1。

删除

删空格

  • LTRIM(s) 返回字符串s,字符串左侧空格字符被删除
  • RTRIM(s) 返回字符串s,字符串右侧空格字符被删除
  • TRIM(s) 返回字符串s,字符串左右两侧空格字符被删除

删内容

TRIM(s1 FROM str):删除字符串str中两端所有的子字符串s1。

SELECT TRIM('a' FROM 'aasvdaaa')
-- svd
SELECT TRIM('xx' FROM 'xxxdexxsdxxxx')
-- xdexxsd
SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');
-- 'barxxx'
SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx');
-- 'bar'
SELECT TRIM(TRAILING 'x' FROM 'xxbarxxxx');
-- 'xxbar'

SELECT INSERT('abcdefg', 3, 4, '')
-- abg

转换

大小写转换

  • LOWER (str) 或 LCASE (str):将字符串str中的字母字符全部转换成小写字母。
  • UPPER(str) 或 UCASE(str):将字符串str中的字母字符全部转换成大写字母。

进制转换

函数描述实例结果
BIN(n)将十进制数n,转为二进制的形式SELECT BIN(15)1111
OCT(n)将十进制数n,转为八进制的形式SELECT OCT(15)17
HEX(n)将十进制数n,转为十六进制的形式SELECT HEX(13)d

在运用上述函数时,可以加以下前缀符:0b(二进制),0x(十六进制)。(在python中0o代表八进制,但mysql无法识别)
例如:
SELECT HEX(0b101001) 将二进制数101001,转为十六进制,结果为29
SELECT BIN(0x3D) 将十六进制数3D,转为二进制,结果为111101

还有一个综合型的。CONV(str, base, N)
将字符串str由base进制转为N进制。
基数base最小为2,最大为36。如果base是负数,N则视为有符号数。否则,N被视为无符号。CONV()以 64 位精度工作。

-- 二进制转为十进制,结果是:15
SELECT CONV('1111',2,10)

-- 十六进制转为二进制,结果是:1010
SELECT CONV('a',16,2);

-- 十六进制转为八进制,结果是:156
SELECT CONV('6E',16,8);

-- 二进制转为十进制,结果是:51
SELECT CONV('110011',2,10);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值