MYSQL提供了许多字符串函数,用于处理和操作字符串数据。以下是一些常用的MYSQL字符串函数。
建议收藏以备后续用到查阅参考。
目录
一、CONCAT 拼接字符串
二、CONCAT_WS 拼接字符串
三、SUBSTR 取子字符串
四、SUBSTRING 取子字符串
五、SUBSTRING_INDEX 取子字符串
六、REPLACE 替换子字符串
七、UPPER 字母转大写
八、LENGTH 取以字节为单位的长度
九、TRIM 删除字符串头部和尾部空格
十、RTRIM 删除尾部空格
十一、LTRIM 删除前导空格
十二、REVERSE 反转后字符串
十三、ASCII 转为ASCII 值
十四、BIN 转为二进制
十五、BIT_LENGTH 取位为单位的长度
十六、CHAR 转为字符
十七、CHAR_LENGTH 转为字符后的长度
十八、CHARACTER_LENGTH 转为字符后的长度
十九、ELT 指定参数返回
二十、EXPORT_SET 指定分隔符拼接字符串
二十一、FIELD 取值在列表中的索引
二十二、FIND_IN_SET 分隔串中找字符串
二十三、FORMAT 数字格式化为字符串
二十四、FROM_BASE64 解码BASE64编码的字符串
二十五、HEX 取参数的十六进制值的字符串表示
二十六、INSERT 字符串中插入一个新的字符串
二十七、INSTR 查找子串在目标串出现的第一个位置
二十八、LCASE 转为小写
二十九、LOWER 转为小写
三十、LEFT 取左子串字符串
三十一、RIGHT 取右子串字符串
三十二、LOCATE 查找第一个子串的位置
三十三、LPAD 左侧填充指定的字符串使其达到指定的长度
三十四、RPAD 右侧填充指定的字符串使其达到指定的长度
三十五、MAKE_SET 按参数1的二进制位反转返回对应位置参数以逗号分隔集合
三十六、MID 取指定位置指定长度的子字符串
三十七、OCT 数字转八进制
三十八、OCTET_LENGTH 取以字节为单位的长度
三十九、ORD 取第一个字符的ASCII码
四十、POSITION 查找子串在目标串出现的第一个位置
四十一、QUOTE 用单引号包围字符串
四十二、REPEAT 字符串重复指定的次数
四十三、SOUNDEX 取发音的 soundex 字符串
四十四、SPACE 取指定数量空格字符串
四十五、STRCMP 比较两个字符串
四十六、TO_BASE64 以base-64编码字符串
四十七、UCASE 字符串转为大写
四十八、UNHEX 十六进制数值的字符串转换为字节
一、CONCAT 拼接字符串
MySQL CONCAT()
函数用来按顺序拼接指定的 2 个或多个字符串,并返回拼接后的字符串。如果您需要使用分隔符连接多个字符串,请使用 CONCAT_WS()
函数。如果拼接的参数中一个为 NULL
, 则返回 NULL
。
语法:
CONCAT(string1, string2, ..., stringN)
参数说明:
- string1, string2, ..., stringN 必需的,至少应指定一个字符串;拼接中若有一个为
NULL
, 则返回NULL
;
返回值:
- 返回拼接后的字符串。
- 只有一个参数,返回参数本身。
- 若有一个参数为NULL,返回NULL。
- 无参数时报错:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'CONCAT'
。
示例:
SELECT CONCAT('Hello', 'World'); // HelloWorld
SELECT CONCAT('Hello', NULL); // NULl
二、CONCAT_WS 拼接字符串
MySQL CONCAT_WS()
函数用来通过指定的分隔符按顺序拼接指定的 2 个或多个字符串,并返回拼接后的字符串。
忽略String1,String2... 中的NULL值。
语法:
CONCAT_WS(separator, string1, string2, ..., stringN)
参数说明:
-
separator
:分隔符,必须的。您可以使用单个字符,也可以使用字符串。 -
string1, string2, ..., stringN
:必需的,至少应指定一个字符串;如果拼接的参数为NULL
, 则会被忽略;当不指定字符串时,MySQL 将会报错:ERROR 1582 (42000): Incorrect parameter count in the call to native function 'CONCAT_WS'
返回值:
- 分隔符连接后的多个字符串。
- 返回
NULL情况:separator
为NULL。
示例:
SELECT
CONCAT_WS('-', 'Hello', 'World'), // Hello-World
CONCAT_WS('-', 'Hello', NULL, 'World'), // Hello-World
SELECT CONCAT_WS('-', 'Hello'); // Hello
三、SUBSTR 取子字符串
MYSQL SUBSTR()函数是 SUBSTRING() 函数的别名。
四、SUBSTRING 取子字符串
MySQL SUBSTRING() 函数从一个字符串中返回一个从指定位置开始的指定长度的子字符串。 SUBSTR() 等同于 SUBSTRING() 函数。
语法:
有4种形式:
SUBSTRING(str, pos)
SUBSTRING(str FROM pos)
SUBSTRING(str, pos, len)
SUBSTRING(str FROM pos FOR len)
参数说明:
- str:必需的,从中提取子字符串的原字符串。
- pos:必需的,开始提取的位置。它可以是正数或者负数。如果是正数,则从字符串的开头为起始位置确定开始提取的位置提取子字符串。如果是负数,则从字符串的结尾为起始位置确定开始提取的位置提取子字符串。
- len:可选的。子字符串的长度(字符数)。如果不指定,则提取到原字符串的结尾。
返回值:
- 当
pos
为0
或者超过原字符串的长度时, 返回空串''
。 - 当
pos
为负数时,从字符串尾部向前计数。 - 当
pos + len
超过原字符串的长度时,从pos位置提取到原字符串的结尾。 - 当参数为
NULL
时, 返回NULL
。
示例:
SELECT
SUBSTRING('Hello', 1, 2), // He
SUBSTRING('Hello', 1), // Hello
SUBSTRING('Hello', -2, 2), // lo
SUBSTRING('Hello' FROM 2 FOR 2) // el
五、SUBSTRING_INDEX 取子字符串
MySQL SUBSTRING_INDEX()
函数返回一个字符串中指定分隔符出现在指定次数之前的子字符串。
语法:
SUBSTRING_INDEX(str, delim, count)
参数说明:
-
str
:必需的。原字符串。 -
delim
:必需的。在原字符串中搜索的分隔符。 -
count
:必需的。分隔符出现的次数。如果count
为负数,则从字符串尾部向前开始计数分隔符,返回分隔符之后的子字符串。
返回值:
- 从左往右数:count为正数,返回一个字符串中指定分隔符出现在指定次数之前的子字符串。
- 从右往左数:count为负数,返回一个字符串中指定分隔符出现在指定次数之前的子字符串。
- 返回空情况:count为0。
- 返回
NULL情况:
任意一个参数为NULL。
示例:
SELECT
SUBSTRING_INDEX('www.baidu.***', '.', 2), // www.baidu
SUBSTRING_INDEX('www.baidu.***', '.', -2), // baidu.***
SUBSTRING_INDEX('www.baidu.***', '.', 0) //
六、REPLACE 替换子字符串
MySQL REPLACE() 函数将字符串中出现的所有子字符串替换为新的子字符串。 REPLACE() 函数是基于字符的替换,并且替换字符串时是区分大小写的。
语法:
REPLACE(str, from_str, to_str)
参数说明:
- str:必需的,原字符串。
- from_str:必需的,被替换的子字符串。
- to_str:必需的,用来替换的新子字符串。
返回值:
- 返回
str
中的所有from_str
被to_str
替换后的字符串。 - 当任意一个参数为
NULL
时,REPLACE()
函数将返回NULL
。
示例:
SELECT
REPLACE('Hello World', 'World', 'Alice'), // Hello Alice
REPLACE('Hello World', 'l', 'L'), // HeLLo WorLd
REPLACE('hello World', 'h', 'HH') // HHello World
七、UPPER 字母转大写
MySQL UPPER() 函数将指定字符串转为大写并返回。 UCASE() 函数是 UPPER() 函数的别名。
如果想将字符串转换为小写,请使用 LCASE() 或者 LOWER() 函数。
语法:
UPPER(str)
参数说明:
- str:必需的。 被处理的字符串。
返回值:
- 定字符串的大写形式。
- 当参数
str
为NULL
时,UPPER()
函数将返回NULL
。
示例:
SELECT UPPER(name)
FROM film
LIMIT 3;
+-------+
|FILM0 |
+-------+
|FILM1 |
+-------+
|FILM2 |
+-------+
八、LENGTH 取以字节为单位的长度
MySQL LENGTH() 函数返回指定字符串的以字节为单位的长度。如果想返回字符的数量,请使用 CHAR_LENGTH() 函数或者 CHARACTER_LENGTH() 函数。
LENGTH() 函数与 OCTET_LENGTH() 函数相同。
语法:
LENGTH(string)
参数说明:
- string:必需的。需要计算长度的字符串。参数可以是其他的类型,比如数字或者日期等,LENGTH() 函数会首先将其转为字符串再计算长度。
返回值:
- 返回指定字符串的以字节为单位的长度,即字节的数量。
- 当参数为
NULL
时, 返回NULL
。
示例:
SELECT
LENGTH('Hello'), // 5
LENGTH(''), // 0
LENGTH(20), // 2
LENGTH(-20), // 3
LENGTH(+20), // 2
LENGTH(NOW()), // 19
LENGTH(CURDATE()), // 10
LENGTH('你好'), // 6
LENGTH(NULL) // NULL
九、TRIM 删除字符串头部和尾部空格
MySQL TRIM() 函数从指定字符串的开头和结尾删除由指定字符组成的最长字符串。如果只想删除字符串的前导空格,请使用 LTRIM() 函数;如果只想删除字符串的尾随空格,请使用 RTRIM() 函数。
语法:
TRIM(str)
TRIM(remove_str FROM str)
TRIM({BOTH | LEADING | TRAILING} remove_str FROM str)
参数说明:
- str:必需的。需要处理的字符串。
- remove_str:可选的。需要删除的前缀和后缀字符串。如果不指定这个
remove_str
,则默认值为空格。 -
BOTH:
代表同时删除前导和尾随的字符。 -
LEADING:
代表只删除前导字符。 -
TRAILING:
代表只删除尾随的字符。 - 如果不指定
{BOTH | LEADING | TRAILING}
,则默认值为BOTH
。
返回值:
- 从指定字符串的开头、结尾或者两端删除由指定字符组成的最长字符串。
-
当参数为
NULL
时,TRIM()
函数将返回NULL
。
示例:
SELECT
TRIM(' Hello '), // Hello
TRIM(BOTH FROM ' Hello '), // Hello
TRIM(LEADING FROM ' Hello '), // Hello 尾部还有空格
TRIM(TRAILING FROM ' Hello '), // Hello头部还有空格
TRIM('_' FROM '___Hello___'), // Hello
TRIM(BOTH '_' FROM '___Hello___'), // Hello
TRIM(LEADING '_' FROM '___Hello___'), // Hello___
TRIM(TRAILING '_' FROM '___Hello___'), // ___Hello
TRIM('_#' FROM '_#_#_Hello_#_#'), // _Hello
TRIM(BOTH '_#' FROM '_#_#_Hello_#_#'), // _Hello
TRIM(LEADING '_#' FROM '_#_#_Hello_#_#'),// _Hello_#_#
TRIM(TRAILING '_#' FROM '_#_#_Hello_#_#')// _#_#_Hello
十、RTRIM 删除尾部空格
MySQL RTRIM() 函数删除指定字符串的尾部空格,并返回没有尾部空格的字符串。如果删除字符串的尾随空格,请使用 RTRIM() 函数;如果想同时删除字符串的前导和尾随空格,请使用 TRIM() 函数。
语法:
RTRIM(str)
参数说明:
-
str
:必需的。需要删除尾部空格的字符串。
返回值:
- 删除了尾部空格的字符串。
- 返回
NULL情况:
参数为NULL
。
示例:
SELECT
RTRIM(' Hello '), // Hello已删除尾部空格
RTRIM(NULL); // NULL
十一、LTRIM 删除前导空格
MySQL LTRIM() 函数删除指定字符串的前导空格,并返回没有前导空格的字符串。如果删除字符串的尾随空格,请使用 RTRIM() 函数;如果想同时删除字符串的前导和尾随空格,请使用 TRIM() 函数。
语法:
LTRIM(str)
参数说明:
- str:必需的。需要删除前导空格的字符串。
返回值:
- 删除了前导空格的字符串。
- 返回NULL情况:参数为
NULL。
示例:
SELECT
LTRIM(' Hello '), // Hello 尾部空格未删除
LTRIM(NULL) // NULL
十二、REVERSE 反转后字符串
MySQL REVERSE()
函数返回反转后的字符串。 REVERSE()
函数基于字符操作而不是基于字节。
语法:
REVERSE(str)
参数说明:
- str:必需的。需要反转的字符串。
返回值:
- 返回反转后的字符串。
- 当参数为
NULL
时,REVERSE()
函数将返回NULL
。
示例:
SELECT
REVERSE('ABC'), // CBA
REVERSE('abc'), // cba
REVERSE('123'), // 231
REVERSE(NULL) // NULL
十三、ASCII 转为ASCII 值
MySQL ASCII()
函数将指定的字符转为对应的 ASCII 值。ASCII()
只返回由指定的字符串的第一个字符的 ASCII 值。
语法:
ASCII(character)
参数说明:
-
character:
必需的。 要返回 ASCII 值的字符。 如果多余一个字符,它将只返回第一个字符的 ASCII 值。
返回值:
- 给定的字符串的第一个字符的 ASCII 值。
- 返回
NULL情况:
character 为NULL
。
示例:
SELECT ASCII('A'); // 65
十四、BIN 转为二进制
MySQL BIN()
函数返回给定数字的二进制值的字符串表示。
语法:
BIN(number)
参数说明:
-
number
:必需的。需要以二进制表示的数字。
返回值:
- 表示给定数字的二进制值。
- 返回
NULL情况:number
为NULL。
示例:
SELECT
BIN(2), // 10
BIN(3.6), // 11
BIN('3A'), // 11
BIN(NULL) // NULL
十五、BIT_LENGTH 取位为单位的长度
MySQL BIT_LENGTH() 函数以位为单位返回给定字符串的长度。
如果想以字节为单位返回字符串的长度,请使用 LENGTH() 函数。
如果想返回字符串中的字符数量,请使用 CHAR_LENGTH() 或者 CHARACTER_LENGTH() 函数。
语法:
BIT_LENGTH(string)
参数说明:
-
string
:必需的。 需要计算位长度的字符串。
返回值:
- 给定字符串的位长度。
- 返回
NULL情况:string
为NULL。
若参数不为字符串,会尝试转为字符串
示例:
SELECT
BIT_LENGTH('a'), // 8
BIT_LENGTH('string'), // 48
BIT_LENGTH(1), // 8
BIT_LENGTH(01), // 8
BIT_LENGTH('01'), // 16
BIT_LENGTH('你好'), // 48
BIT_LENGTH(NULL) // NULL
十六、CHAR 转为字符
MySQL CHAR()
函数将每个参数对应的整数转为对应的字符,并将这些字符组成一个字符串返回。
忽略值为NULL的参数。
语法:
CHAR(num1, [num2, ...])
参数说明:
-
num1, [num2, ...]
:必需的。一些整数,或者能转为整数的值。
返回值:
- 一个字符串,其中的字符由每个整数参数对应的字符组成。
- 参数NULL直接被忽略,只有一个参数且为NULL时返回空。
示例:
SELECT
CHAR(65, 66, 67), // ABC
CHAR(65, '66', '67'), // ABC
CHAR(65.4, '66.5', '67.6'), // ABC
CHAR(65, 66, NULL, 67), // ABC
CHAR(NULL) //
十七、CHAR_LENGTH 转为字符后的长度
在 MySQL 中, CHAR_LENGTH() 返回给定字符串的长度。 CHAR_LENGTH() 返回的是字符串中字符的数量,与字符编码无关。此函数是 CHARACTER_LENGTH() 函数的别名。
语法:
CHARACTER_LENGTH(string)
参数说明:
-
string
:必需的。 需要计算长度的字符串。
返回值:
- 给定字符串的长度(字符的个数)。
- 返回
NULL情况:string
为NULL
示例:
SELECT CHAR_LENGTH('cxian'); // 5
十八、CHARACTER_LENGTH 转为字符后的长度
在 MySQL 中, CHARACTER_LENGTH() 返回给定字符串的长度。 CHARACTER_LENGTH() 返回的是字符串中字符的数量,与字符编码无关。此函数是 CHAR_LENGTH() 函数的别名。
用法同CHAR_LENGTH(number)函数。
十九、ELT 指定参数返回
MySQL ELT()
函数从第二个参数开始查找由第一个参数指定位置的参数并作为字符串返回。
语法:
ELT(pos, str1, str2, ...)
参数说明:
-
pos
:必需的。一个用于指定位置的数字。 -
str1, str2, ...
:必需的。字符串参数列表。
返回值:
- 由
pos
指定位置的参数。 - pos大于0:返回第pos+1的参数。
- 返回
NULL情况:pos
小于 1 或者超过参数的数量。
示例:
SELECT
ELT(1, 'Aa', 'Bb', '***'), // Aa
ELT(3, 'Aa', 'Bb', '***'), // ***
ELT(-1, 'Aa', 'Bb', '***'), // NULL
ELT(0, 'Aa', 'Bb', '***'), // NULL
ELT(4, 'Aa', 'Bb', '***') // NULL
二十、EXPORT_SET 指定分隔符拼接字符串
语法:
EXPORT_SET(bits, on, off, separator, length)
参数说明:
-
bits
:必需的。一个数字。将bits
转为二进制并反转后的各个位的值决定on
还是off
出现在该位置。 -
on
:必需的。当位值为1
时使用的字符串。 -
off
:必需的。当位值为0
时使用的字符串。 -
separator
:可选的。分隔符或者分隔字符串,默认值为,
。 -
length
:可选的。集合的元素的个数,默认值为64
。
返回值:
- 根据
bits
对应的二进制并反转后的值挑选对应的字符串,并返回一个逗号分隔的字符串集合。
示例:
SELECT
EXPORT_SET(5, 'Aa', 'Bb', '#', 4), // Aa#Bb#Aa#Bb
// bits = 5, 5 的二进制位 101, 总长度为 4,左边补 0 变为 0101。然后反转变为 1010。
// 按 1010 中的每位的值使用 on 或者 off:
// 第一位为 1,则使用 Aa。
// 第二位为 0,则使用 Bb。
// 第三位为 1,则使用 Aa。
// 第四位为 0,则使用 Bb。
// 最后将所有的字符串使用分隔符 # 组合起来,即:Aa#Bb#Aa#Bb。
EXPORT_SET(5, 'Y', 'N', ',', 4), // Y,N,Y,N
EXPORT_SET(5, '1', '0', ',', 10), // 1,0,1,0,0,0,0,0,0,0
EXPORT_SET(0, 'Y', 'N', ',', 4) // N,N,N,N
二十一、FIELD 取值在列表中的索引
MySQL FIELD()
函数返回一个指定的值在给定的列表中的索引。
语法:
FIELD(value, v1, v2, ..., vN)
参数说明:
-
value
:必须的。要在列表中查找的值。 -
v1, v2, ..., vN
:必须的。被搜索的列表中的各个元素。
返回值:
- 指定的值对应的位置索引(索引从1开始)。
- 返回0情况:
- 找不到指定的值。
- 查找的值为
NULL。
示例:
SELECT
FIELD('A', 'A', 'B', 'C'), // 1
FIELD('1', 'A', 'B', 'C'), // 0
FIELD(NULL, NULL, 'B', 'C') // 0
二十二、FIND_IN_SET 分隔串中找字符串
MySQL FIND_IN_SET() 函数返回字符串在一个逗号分隔的字符串列表中的索引。 FIND_IN_SET() 函数与 FIELD() 函数类似,不同的是 FIELD() 中的列表是由多个参数组成的,并且参数的类型也不一定是字符串。
语法:
FIND_IN_SET(string, string_list)
参数说明:
-
string
:必须的。这是要搜索的字符串。 -
string_list
:必须的。这是一个使用逗号分隔的字符串列表。
返回值:
- 找到则返回对应的位置索引。
- 返回
0情况:
找不到。
找到空串。
- 返回
NULL情况:
任何一个参数为NULL。
示例:
SELECT
FIND_IN_SET('A', 'A,B,C'), // 1
FIND_IN_SET('1', 'A,B,C'), // 0
FIND_IN_SET(NULL, 'A,B,C'), // NULL
FIND_IN_SET('D', NULL) // NULL
二十三、FORMAT 数字格式化为字符串
MySQL FORMAT()
函数将数字四舍五入到指定的小数位数,并按照 #,###,###.##
之类的格式进行格式化,然后将结果作为字符串返回。
语法:
FORMAT(number, decimal_places)
参数说明:
-
number
:必需的。 需要格式化的数字。 -
decimal_places
:必需的。 要保留的小数位数。
返回值:
-
指定小数位数的类似于
#,###,###.##
格式的字符串。有一定规则:- 若以数字开头,则将开头的数字部分转为数字。
- 若不能转为数字,则按照
0
处理。
- 返回
NULL情况:number为null。
-
无小数点情况:
decimal_places为0。
示例:
SELECT
FORMAT(111111, 2), // 111,111.00
FORMAT(111111.111, 2),// 111,111.11
FORMAT(111111.111, 0),// 111,111
FORMAT('111111', 2), // 111,111.00
FORMAT('11111A', 2), // 11,111.00
FORMAT('A11111', 2), // 0.00
FORMAT(NULL, 2) // NULL
二十四、FROM_BASE64 解码BASE64编码的字符串
MySQL FROM_BASE64() 函数解码 base-64 编码的数据并将结果作为二进制字符串返回。
FROM_BASE64() 函数可以解码 TO_BASE64() 函数的结果。
不同于现有的 base-64 方案, MySQL TO_BASE64() 和 FROM_BASE64() 函数有些特殊的规则:
- 字母值 62 的编码是 '+'.
- 字母值 63 的编码是 '/'.
- 编码输出由 4 个可打印字符组成。输入数据的每 3 个字节使用 4 个字符进行编码。如果最后一组长度不够 4,则用 '=' 字符填充。
- 在编码输出的每 76 个字符之后添加一个换行符,以将长输出分成多行。
- 解码识别并忽略换行符、回车符、制表符和空格。
语法:
FROM_BASE64(str)
参数说明:
-
str
:必需的。 用于base-64
解码的字符串。
返回值:
- 将
base-64
编码的数据解码结果作为二进制字符串返回。 - 返回
NULL情况:str
为NULL。
- 由于
FROM_BASE64()
函数返回的是二进制字符串,因此在 mysql 客户端显示的结果可能是十六进制内容。请在登陆时使用--binary-as-hex=false
以禁用将二进制内容显示为十六进制。
示例一登陆时不使用--binary-as-hex
:
示例二登陆时使用--binary-as-hex=false
:
注:使用Navicat Premium连接数据库显示效果如示例二。
二十五、HEX 取参数的十六进制值的字符串表示
MySQL HEX()
函数返回给定数字或字符串的十六进制值的字符串表示。
语法:
HEX(number)
HEX(string)
参数说明:
-
number/string
:必需的。需要以十六进制表示的数字或字符串。
返回值:
- 参数的十六进制值。
- 返回
NULL情况:number/string
为NULL。
示例:
SELECT
HEX(255), // FF
HEX('b'), // 62
HEX('abc'), // 616263
HEX(NULL) // NULL
二十六、INSERT 字符串中插入一个新的字符串
MySQL INSERT()
函数在一个字符串中插入一个新的字符串,该新的字符串会替换源字符串中指定位置开始的指定长度的子字符串。
语法:
INSERT(str, pos, len, newstr)
参数说明:
- str:必需的。 需要处理的字符串。
- pos:必需的。 开始插入新字符串 newstr 的位置。pos 的值从 1 开始。
- len:必需的。 要被替换的字符的数量。
- newstr:必需的。 要插入的新字符串。
返回值:
-
被处理后的原字符串
str
,其中str
中从pos
开始长度为len
的子字符串被newstr
替换掉。 - 不替换情况:
- len为0。
- pos不在字符串长度范围内。
- 若len > str.length - pos,则从位置
pos
替换str.length - pos的字符串 - 返回
NULL情况:
-
任何参数是NULL。
-
示例:
SELECT
INSERT(NULL, 6, 1, ' '), // NULL
INSERT('Hello_World', 6, 1, ' '), // Hello World
INSERT('Hello_World', 6, 20, ' '), // Hello
二十七、INSTR 查找子串在目标串出现的第一个位置
MySQL INSTR() 函数返回一个子字符串在一个字符串中第一次出现的位置的数字索引。 INSTR() 函数是不区分大小写的。 INSTR() 函数与具有两个参数的 LOCATE() 函数的和 POSITION() 功能相同。
语法:
INSTR(str, substr)
参数说明:
- str:必需的。 被搜索的字符串。
- substr:必需的。 在 str 中搜索的子串。
返回值:
- 子字符串
substr
在字符串str
中的位置的数字索引。(数字索引从1
开始) - 返回
0情况:找不到。
- 返回
NULL情况:
任意一个参数为NULL。
示例:
SELECT
INSTR('Hello World', 'He'), // 1
INSTR('Hello World', 'he'), // 1
INSTR('Hello World', 'do'), // 0
INSTR('Hello World', NULL) // NULL
二十八、LCASE 转为小写
MySQL LCASE() 函数将指定字符串转为小写并返回。 LCASE() 函数是 LOWER() 函数的别名。
如果想将字符串转换为大写,请使用 UCASE() 或者 UPPER() 函数。
语法:
LCASE(str)
参数说明:
- str:必需的。 被处理的字符串。
返回值:
- 指定字符串的小写形式。
- 返回
NULL情况:str为NULL。
示例:
SELECT
LCASE('Hello'), // hello
LCASE(NULL) // NULL
二十九、LOWER 转为小写
MySQL LOWER() 函数将指定字符串转为小写并返回。 LCASE() 函数是 LOWER() 函数的别名。
如果想将字符串转换为大写,请使用 UCASE() 或者 UPPER() 函数。
详见:二十七、LCASE 转为小写
三十、LEFT 取左子串字符串
MySQL LEFT() 函数从指定字符串的左侧返回指定数量的字符组成的字符串。如果想从字符串的右侧提取字符,请使用 RIGHT() 函数。
语法:
LEFT(string, length)
参数说明:
- string:必需的。需要从中提取字符的字符串。
- length:必需的。需要从字符串中提取字符的数量。
返回值:
- 指定数量的字符组成的左子字符串。
- 返回原字符串情况:length大于string的长度。
- 返回空串情况:length为小于等于0。
- 返回
NULL情况:
任意一个参数为NULL。
示例:
SELECT
LEFT('Hello', 2), // He
LEFT('Hello', 6), // Hello
LEFT('Hello', 0), //
LEFT('Hello', -1), //
LEFT('Hello', NULL) // NULL
三十一、RIGHT 取右子串字符串
MySQL RIGHT() 函数从指定字符串的右侧返回指定数量的字符组成的字符串。如果想从字符串的左侧提取字符,请使用 LEFT() 函数。
操作参考三十、LEFT 取左子串字符串相似。不同是LEFT 是左边,而RIGHT是右边。(这里不再举例)
三十二、LOCATE 查找第一个子串的位置
MySQL LOCATE() 函数返回一个字符串在另一个字符串中第一次出现的位置的数字索引。 LOCATE() 函数是不区分大小写的。 LOCATE() 函数与具有两个参数的 INSTR() 函数的和 POSITION() 功能相同。
语法:
LOCATE(substr, str)
LOCATE(substr, str, startPos)
参数说明:
- substr:必需的。 在 str 中搜索的子串。
- str:必需的。 被搜索的字符串。
- startPos:可选的。 在 str 中开始搜索的位置,从 1 开始。
返回值:
- 子字符串
substr
在字符串str
中的位置的数字索引。(数字索引从1
开始) - 返回
0情况:
找不到。
-
startPos
为0。
- 返回
NULL情况:
任意一个参数为NULL
。
示例:
SELECT
LOCATE('He', 'Hello World'), // 1
LOCATE('ho', 'Hello World'), // 1
LOCATE('go', 'Hello World'), // 0
LOCATE(NULL, 'Hello World'), // NULL
三十三、LPAD 左侧填充指定的字符串使其达到指定的长度
MySQL LPAD() 函数在字符串的左侧填充指定的字符串,使其达到指定的长度。如果想在字符串的右侧填充字符串,请使用 RPAD() 函数。
语法:
LPAD(str, len, padstr)
参数说明:
- str:必需的。需要被填充的字符串。
- len:必需的。填充字符串需要达到的长度。
- padstr:可选的。被用来填充到原字符串左侧的字符串。
返回值:
- 填充后的字符串。
- 若
len
小于原字符串str
的长度,str
将被截断到len
的长度。 - 返回
NULL情况:
-
len
为负数。 - 任意一个参数为
NULL。
-
示例:
SELECT
LPAD('oh', 5, 'o'), // ooooooh
LPAD('oh', 1, '1'), // o
LPAD('oh', -1, 'o'), // NULL
LPAD('World', 15, 'Hello') // HelloHelloWorld
三十四、RPAD 右侧填充指定的字符串使其达到指定的长度
MySQL RPAD() 函数在一个字符串的右侧填充指定的字符串,使其达到指定的长度。如果想在字符串的左侧填充字符串,请使用 LPAD() 函数。
操作与LPAD相似。不同点是LPAD是多左侧,RPAD是右侧。详见:三十三、LPAD 左侧填充指定的字符串使其达到指定的长度。
三十五、MAKE_SET 按参数1的二进制位反转返回对应位置参数以逗号分隔集合
MySQL MAKE_SET()
函数返回一个逗号分隔的字符串集合,该函数通过第一个参数对应的二进制决定是否其他字符串参数是否添加到结果集合中。
语法:
MAKE_SET(bits, str1, str2, ...)
参数说明:
-
bits
:必需的。一个数字。将bits
转为二进制并反转后的各个位决定str1, str2, ...
是否出现在结果中。 -
str1, str2, ...
:必需的。备选字符串。str1, str2, ...
分别由bits
二进制并反转后的值中的第1, 2, ...
决定是否出现在结果中。
返回值:
-
根据
bits
对应的二进制并反转后的值挑选对应的字符串,并返回一个逗号分隔的字符串集合。 - NULL参数直接被忽略。
- 若bits为0,返回空。
示例:
SELECT
MAKE_SET(0, 'a', 'b', 'c', 'd'), //
MAKE_SET(1, 'a', 'b', 'c', 'd'), // a
MAKE_SET(2, 'a', 'b', 'c', 'd'), // a,b
MAKE_SET(3, 'a', 'b', 'c', 'd'), // b
MAKE_SET(4, 'a', 'b', 'c', 'd'). // c
- bits为0:返回空
- bits为1:二进制为0001,反转后为1000,对应a,返回a。
- bits为2:二进制为0010,反转后为0100,对应b,返回b。
- bits为3:二进制为0011,反转后为1100,对应ab,返回a,b。
- bits为4:二进制为0100,反转后为0010,对应c,返回c。
三十六、MID 取指定位置指定长度的子字符串
MySQL MID()
函数返回一个字符串中从指定位置开始的指定长度的子字符串。
MID(str, pos, len) 等同于 SUBSTRING(str, pos, len) 和 SUBSTR(str, pos, len) 函数。
语法:
MID(str, pos, len)
详见:四、SUBSTRING 取子字符串
三十七、OCT 数字转八进制
MySQL OCT()
函数返回给定数字的八进制值的字符串表示。
语法:
OCT(number)
参数说明:
-
number
:必需的。需要以八进制表示的数字。
返回值:
- 给定数字的八进制值。
- 返回
NULL情况:
参数number
为NULL。
- 若
number
为非数字:首先尝试将其转为数字后再返回数字的八进制表示,无法转为数字则返回0。
示例:
SELECT
OCT(12), // 14
OCT(3.5), // 3
OCT('A'), // 0
OCT('3A'), // 3
OCT(NULL) // NULL
三十八、OCTET_LENGTH 取以字节为单位的长度
MySQL OCTET_LENGTH() 函数返回指定字符串的以字节为单位的长度。如果想返回字符的数量,请使用 CHAR_LENGTH() 函数或者 CHARACTER_LENGTH() 函数。
与 LENGTH() 函数相同。
详见:八、LENGTH 取以字节为单位的长度
三十九、ORD 取第一个字符的ASCII码
MySQL ORD() 函数返回字符串参数中的第一个字符的字符代码。如果第一个字符是单字节字符, ORD() 函数返回字符的 ASCII 值;如果第一个字符是多字节字符,返回公式 第一个字节代码 + 第二个字节的代码 * 256 + 第三个字节的代码 * 256 * 256 的结果。
语法:
ORD(string)
参数说明:
-
string
:必需的。一个字符串。
返回值:
-
首先获取参数
string
最左侧的字符,然后根据字符是否多字节字符按如下规则返回:- 若第一个字符是单字节字符, 返回字符的 ASCII 值。
- 若第一个字符是多字节字符,根据返回公式
第一个字节代码 + 第二个字节的代码 * 256 + 第三个字节的代码 * 256 * 256
的结果。
示例:
SELECT
ORD('abc'), // 97
ORD('a'), // 97
ORD('A'), // 65
ORD('北京') // 15043735
四十、POSITION 查找子串在目标串出现的第一个位置
MySQL POSITION() 函数返回一个字符串在另一个字符串中第一次出现的位置的数字索引。 POSITION() 函数是不区分大小写的。 POSITION() 函数与具有两个参数的 INSTR() 函数和 LOCATE() 函数 功能相同。语法上有些不同。
语法:
POSITION(substr IN str)
参数说明:
-
substr
:必需的。 在str
中搜索的子串。 -
str
:必需的。 被搜索的字符串。
返回值:
-
子字符串
substr
在字符串str
中的位置的数字索引。(数字索引从1
开始) - 返回0情况:找不到。
- 返回 NULL情况:任意一个参数为
NULL。
示例:
SELECT
POSITION('Wo' IN 'Hello World'), // 7
POSITION('wo' IN 'Hello World'), // 7
POSITION('1' IN 'Hello World'), // 0
POSITION('l' IN NULL) // NULL
四十一、QUOTE 用单引号包围字符串
MySQL QUOTE()
函数返回一个用单引号包围的字符串。 QUOTE()
函数会对 \
, '
符号转义。
语法:
QUOTE(string)
参数说明:
-
string
:必需的。一个字符串。
返回值:
- 用单引号包围的字符串。
- 返回NULL情况:参数为
NULL。
示例:
SELECT
QUOTE('Hello''word!'), // 'Hello\'word!'
QUOTE('Hello world!'), // 'Hello world!'
QUOTE(NULL) // NULL
四十二、REPEAT 字符串重复指定的次数
MySQL REPEAT()
函数将指定的字符串重复指定的次数并返回。
语法:
REPEAT(str, count)
参数说明:
-
str
:必需的。 需要重复的字符串。 -
count
:必需的。 需要重复的次数。
返回值:
- 字符串重复指定的次数并返回。
- 返回空字符串
''情况:count为0。
- 返回
NULL情况:
任意一个参数为NULL。
示例:
SELECT
REPEAT('Hello', 3), // HelloHelloHello
REPEAT('MySQL', 0), //
REPEAT('MySQL', -1), //
REPEAT('MySQL', NULL) // NULL
四十三、SOUNDEX 取发音的 soundex 字符串
MySQL SOUNDEX()
函数返回表示字符串发音的 soundex 字符串。 SOUNDEX()
函数用来比较两个单词的发音是否相同。如果两个单词发音相同,则他们的 soundex 字符串是相同的。
SOUNDEX(string) 函数只处理参数 string 中的字母,其他非字母字符将被忽略。
语法:
SOUNDEX(string)
参数说明:
-
string
:必需的。一个字符串。
返回值:
-
发音的 soundex 字符串。
-
标准的 soundex 字符串的长度为四个字符,但 SOUNDEX() 函数返回的字符串长度可能超过 4。如果您想获取标准的 soundex 字符串,您可以对 SOUNDEX() 函数的结果使用 SUBSTRING() 函数进行截取。
-
示例:
SELECT
SOUNDEX('Hole'), // H400
SOUNDEX('Whole'), // W400
SOUNDEX('Our'), // O600
SOUNDEX('Our123'), // O600
SOUNDEX('123Our123')// O600
四十四、SPACE 取指定数量空格字符串
MySQL SPACE()
函数返回一个字符串,它由指定数量的空格符组成。
语法:
SPACE(count)
参数说明:
-
count
:必需的。组成字符串的空格符号的数量。
返回值:
- 由指定数量的空格组成的字符串。
- 返回''情况:
count
小于 1 。 - 返回
NULL情况:
参数为NULL
示例:
SELECT
LENGTH(SPACE(2)), // 2
LENGTH(SPACE(-1)), // 0
SPACE(NULL) // NULL
四十五、STRCMP 比较两个字符串
MySQL STRCMP()
函数比较两个字符串并返回比较结果。STRCMP()
函数基于字符串采用的字符排列规则(collation)比较两个字符串。
语法:
STRCMP(str1, str2)
参数说明:
-
str1
:必需的。参与比较的第 1 个字符串。 -
str2
:必需的。参与比较的第 2 个字符串。
返回值:
-
两个字符串比较后的结果。
- 若
str1
等于str1
,STRCMP()
函数将返回0
。 - 若
str1
小于str1
,STRCMP()
函数将返回-1
。 - 若
str1
大于str1
,STRCMP()
函数将返回1
。 - 返回
NULL情况:
任意个参数为NULL。
- 若
示例:
SELECT
STRCMP('hello', 'hello'), // 0
STRCMP('hello1', 'hello'), // 1
STRCMP('hello', 'hello1'), // -1
STRCMP('hello', 'world'), // -1
STRCMP(NULL, NULL) // NULL
- 修改排序规则比较如下:
SET @s1 = _utf8mb4 'hello' COLLATE utf8mb4_general_ci;
SET @s2 = _utf8mb4 'Hello' COLLATE utf8mb4_0900_ai_ci;
SET @s3 = _utf8mb4 'hello' COLLATE utf8mb4_0900_as_cs;
SET @s4 = _utf8mb4 'Hello' COLLATE utf8mb4_0900_as_cs;
SELECT
STRCMP(@s1, @s2),// 排序规则不同无法比较直接报错
STRCMP(@s3, @s4) // -1
四十六、TO_BASE64 以base-64编码字符串
MySQL TO_BASE64() 函数将给定字符串以 base-64 形式编码,并返回编码后的字符串表示。
FROM_BASE64() 函数可以解码 TO_BASE64() 函数的结果。
不同于现有的 base-64 方案, MySQL TO_BASE64() 和 FROM_BASE64() 函数有些特殊的规则:
- 字母值 62 的编码是
'+'。
- 字母值 63 的编码是
'/'。
- 编码输出由 4 个可打印字符组成。输入数据的每 3 个字节使用 4 个字符进行编码。如果最后一组长度不够 4,则用
'='
字符填充。 - 在编码输出的每 76 个字符之后添加一个换行符,以将长输出分成多行。
- 解码识别并忽略换行符、回车符、制表符和空格。
语法:
TO_BASE64(str)
参数说明:
-
str
:必需的。 用于base-64
编码的字符串。
返回值:
-
以
base-64
形式编码后的字符串。 - 返回
NULL情况:参数为NULL。
示例:
SELECT
TO_BASE64('Hello World'), // SGVsbG8gV29ybGQ=
FROM_BASE64(TO_BASE64('Hello World')), // Hello World
TO_BASE64(NULL) // NULL
四十七、UCASE 字符串转为大写
MySQL UCASE() 函数将指定字符串转为大写并返回。UCASE() 函数是 UPPER() 函数的别名。
如果想将字符串转换为小写,请使用 LCASE() 或者 LOWER() 函数。
详见:七、UPPER 字母转大写。
四十八、UNHEX 十六进制数值的字符串转换为字节
MySQL UNHEX() 函数将代表十六进制数值的字符串转换为字节,并返回对应的二进制字符串。
UNHEX() 函数的处理过程为从十六进制数值的字符串参数中每两位转换为字节,并将所有的字节组合起来作为二进制字符串返回。
UNHEX() 函数是 HEX() 函数的逆向操作。
语法:
UNHEX(string)
参数说明:
-
string
:必需的。十六进制数值字符串。字符串中只允许出现十六进制允许的符号:0...9
,A...F
,a...f
。
返回值:
- 二进制字符串。
- 返回
NULL情况:
-
string
不是合法的十六进制数值。 -
number
为NULL。
-
- 由于
UNHEX()
函数返回的是二进制字符串,因此在 mysql 客户端显示的结果可能是十六进制内容。请在登陆时使用--binary-as-hex=false
以禁用将二进制内容显示为十六进制。
示例:
SELECT
HEX('Hello'), // 48656C6C6F
UNHEX(HEX('Hello')), // Hello
UNHEX('Invalid'), // NULL
UNHEX(NULL) // NULL
- 使用
--binary-as-hex示例详见
:二十五、HEX 取参数的十六进制值的字符串表示。