MySQL函数 - String函数
String - 字符串函数
文章目录
- String - 字符串函数
- CHAR_LENGTH - 字符串长度
- CHARACTER_LENGTH - 字符串长度
- LENGTH - 返回字符串的字节长度(而非字符数)
- CONCAT - 字符串拼接
- CONCAT_WS - 字符串拼接
- FIELD - 指定值在值列表中的索引位置
- FIND_IN_SET - 字符串在字符串列表中的位置
- INSTR - 查找子字符串第一次出现的位置
- LOCATE - 查找子字符串第一次出现的位置
- POSITION - 查找子字符串在目标字符串中第一次出现的位置
- FORMAT - 格式化数字为易读的字符串
- INSERT - 在指定位置插入子字符串
- LPAD - 在字符串左侧填充指定的字符
- RPAD - 在字符串右侧填充指定的字符
- LCASE - 将字符串转换为小写
- LOWER - 将字符串转换为小写
- UCASE - 将字符串转换为大写
- UPPER - 将字符串转换为大写
- LEFT - 从字符串左侧提取指定数量字符
- RIGHT - 从字符串右侧提取指定数量字符
- MID - 从字符串的指定位置开始提取指定长度的字符
- SUBSTR - 从字符串的指定位置开始提取指定长度的字符
- SUBSTRING - 从字符串的指定位置开始提取指定长度的字符
- SUBSTRING_INDEX - 根据指定的分隔符从字符串中提取子串
- LTRIM - 去除字符串左侧空白字符
- RTRIM - 去除字符串右侧空白字符
- TRIM - 去除字符串两端空白字符或其他指定字符
- REPEAT - 将字符串重复指定的次数
- REPLACE - 将字符串中所有出现的指定子串替换为新的子串
- REVERSE - 将字符串中的字符顺序完全颠倒
- SPACE - 生成指定数量空格字符串
- STRCMP - 比较两个字符串
CHAR_LENGTH - 字符串长度
**定义:**CHAR_LENGTH() 函数返回字符串的长度(以字符为单位)。
注意:这个函数等同于 CHARACTER_LENGTH 函数。
**语法:**CHAR_LENGTH(string)
参数值
参数 | 描述 |
---|---|
string | 必须。计算长度的字符串 |
示例
-- 2
select CHAR_LENGTH('你好');
-- 7
select CHAR_LENGTH('abc def');
CHARACTER_LENGTH - 字符串长度
这个函数等同于 CHAR_LENGTH 函数。
LENGTH - 返回字符串的字节长度(而非字符数)
**定义:**用于获取字符串长度的函数,它返回字符串的字节长度(而非字符数),这是处理字符串时的重要基础函数。
**语法:**LENGTH(string)
参数值
参数 | 描述 |
---|---|
string | 必需。计算长度的字符串 |
示例
SELECT LENGTH('MySQL'); -- 返回 5(5个单字节字符)
SELECT LENGTH('数据库'); -- 返回 9(UTF-8中每个中文3字节)
SELECT LENGTH('😊'); -- 返回 4(表情符号占4字节)
SELECT LENGTH(NULL); -- 返回 NULL
CONCAT - 字符串拼接
**定义:**CONCAT() 函数将两个或多个表达式相加。
**语法:**CONCAT(expression1, expression2, expression3,…)
注意:如果任何一个参数为NULL值,则整体返回NULL。
参数值
参数 | 描述 |
---|---|
expression1, expression2, expression3 | 必须。要拼接起来的表达式。 |
示例
-- abcdef
select concat('abc', 'def');
-- null
select concat('abc', null, 'def');
-- abc123
select concat('abc', 123);
CONCAT_WS - 字符串拼接
**定义:**用指定的分隔符,将两个或多个表达式相加。
**语法:**CONCAT_WS(separator, expression1, expression2, expression3,…)
参数值
参数 | 描述 |
---|---|
separator | 必需。在每个表达式之间添加的分隔符。 如果 separator 为 NULL,则此函数整体返回 NULL |
expression1, expression2, expression3 | 必需。要加在一起的表达式。 将跳过具有 NULL 值的表达式 |
示例
-- null
select concat_ws(null, 'abc', 'def');
-- abc-def
select concat_ws('-', 'abc', 'def');
-- abc=def
select concat_ws('=', 'abc', null, 'def');
-- hello world
select concat_ws(' ', 'hello', 'world' );
FIELD - 指定值在值列表中的索引位置
定义:返回指定值在值列表中的索引位置,位置索引从1开始。
注意:
- 此函数执行不区分大小写的搜索。
- 如果在值列表中没有找到指定的值,该函数将返回0。
- 如果指定值为NULL,该函数将返回0。
**语法:**FIELD(value, val1, val2, val3, …)
参数值
参数 | 描述 |
---|---|
value | 必需。要在列表中搜索的指定值 |
val1, val2, val3, … | 必需。要搜索的值列表 |
示例
-- 0,指定值为null
select field(null, 'a', 'b', 'c');
-- 0,指定值在列表中找不到
select field('q', 'a', 'b', 'c');
-- 2
select field('b', 'a', 'b', 'c');
-- 2,不区分大小写
select field('B', 'a', 'b', 'c');
-- 2,不区分大小写
select field('b', 'A', 'B', 'C');
FIND_IN_SET - 字符串在字符串列表中的位置
**定义:**返回字符串在字符串列表(逗号分割)中的位置。
**语法:**FIND_IN_SET(string, string_list)
注意:
- 如果在 string_list 中没有找到string,这个函数返回0
- 如果 string 或 string_list 为 NULL,则此函数返回 NULL
- 如果 string_list 是一个空字符串(“”),这个函数返回0
参数值
语法 | 描述 |
---|---|
string | 必需。要搜索的字符串 |
string_list | 必需。要搜索的字符串值列表(以逗号分隔) |
示例
-- 2
SELECT FIND_IN_SET('b', 'a,b,c,d');
-- 0
SELECT FIND_IN_SET('x', 'a,b,c');
-- 2, 不区分大小写?
SELECT FIND_IN_SET('B', 'a,b,c');
-- NULL
SELECT FIND_IN_SET(NULL, 'a,b,c');
-- NULL
SELECT FIND_IN_SET('b', NULL);
INSTR - 查找子字符串第一次出现的位置
定义:用于查找子字符串位置的函数,它返回子字符串在目标字符串中第一次出现的位置。
**语法:**INSTR(str, substr)
参数值
参数 | 描述 |
---|---|
str | 必需。将要搜索的字符串 |
substr | 必需。要在str中搜索的子字符串。 如果没有找到substr,这个函数返回0 |
示例
SELECT INSTR('MySQL Tutorial', 'SQL'); -- 返回 3
SELECT INSTR('Hello World', 'world'); -- 返回 7(区分大小写取决于数据库的字符集和排序规则)
SELECT INSTR('早餐吃鸡蛋', '鸡蛋'); -- 返回 4(中文字符处理)
LOCATE - 查找子字符串第一次出现的位置
**定义:**用于查找子字符串位置的函数,它返回子字符串在目标字符串中第一次出现的位置。与 INSTR()
功能相似但参数顺序不同,且 LOCATE()
是标准 SQL 函数。
**语法:**LOCATE(substr, str[, pos]), 参数pos可选。
参数值
参数 | 描述 |
---|---|
substr | 必需。要在 str 中搜索的子字符串 |
str | 必需。将被搜索的字符串 |
pos | 可选。搜索的起始位置。 位置 1 为默认值 |
示例
SELECT LOCATE('bar', 'foobarbar'); -- 返回 4
SELECT LOCATE('x', 'foobar'); -- 返回 0
SELECT LOCATE('数据', 'MySQL数据库'); -- 返回 6(中文字符位置)
SELECT LOCATE('数据', '数据MySQL数据库'); -- 返回1
SELECT LOCATE('数据', '数据MySQL数据库', 3); -- 返回8
POSITION - 查找子字符串在目标字符串中第一次出现的位置
**定义:**用于查找子字符串位置的函数,它返回子字符串在目标字符串中第一次出现的位置。这是标准 SQL 定义的字符串搜索函数,与 LOCATE()
和 INSTR()
功能相似但语法不同。
**语法:**POSITION(substr IN str)
参数值
参数 | 描述 |
---|---|
substr | 必需。要在 str 中查找的子字符串 |
str | 必需。将被搜索的原始字符串 |
示例
SELECT POSITION('bar' IN 'foobarbar'); -- 返回 4
SELECT POSITION('数据' IN 'MySQL数据库'); -- 返回 6(中文字符位置)
SELECT POSITION('x' IN 'foobar'); -- 返回 0(未找到)
FORMAT - 格式化数字为易读的字符串
**定义:**将数字格式化为易读的字符串形式,包含千位分隔符和指定小数位数。将数字格式化为像"#,###,###.##"这样的格式。
**语法:**FORMAT(numbe, decimal_places[, locale])
参数值
参数值 | 描述 |
---|---|
numbe | 必需。要格式化的数字,整数或者小数 |
decimal_places | 必需。number 的小数位数,如果该参数为0,则该函数返回一个没有小数位的字符串 |
locale | 指定本地化设置(如千位分隔符和小数点的表示方式),默认为 ‘en_US’(使用逗号作为千位分隔符,点作为小数点) |
示例
-- '1,234,567.46'(自动四舍五入)
SELECT FORMAT(1234567.4567, 2);
-- '9,876,543'(无小数部分)
SELECT FORMAT(9876543.210, 0);-- 指定本地化参数
-- 德语格式: '1.234.567,89'(点作为千位分隔符,逗号作为小数点)
SELECT FORMAT(1234567.89, 2, 'de_DE');
-- 法语格式: '1 234 567,89'(空格作为千位分隔符)
SELECT FORMAT(1234567.89, 2, 'fr_FR');
INSERT - 在指定位置插入子字符串
**定义:**在字符串中的指定位置插入一个字符串,并插入一定数量的字符。
**语法:**INSERT(str, pos, len, newstr)
注意:
- 如果 pos 超出 str 的长度,这个函数整体返回 str
- 如果 len 大于 str 其余部分的长度,此函数将 str 替换为 pos 直到 string, 相当于替换到结尾
参数值
参数 | 描述 |
---|---|
str | 必需。将要修改的字符串 |
pos | 必需。插入 newstr 的位置,索引位置从1开始。 |
len | 必需。要替换的字符数,0表示纯插入。 |
newstr | 必需。要插入 string 的新字符串 |
示例
-- MyPostgreSQL(在位置3插入)
SELECT INSERT('MySQL', 3, 0, 'Postgre');
-- MyPostgrel(替换位置3开始的2个字符)
SELECT INSERT('MySQL', 3, 2, 'Postgre');
-- MyPostgre(从位置3开始替换3个字符,相当于到结尾)
SELECT INSERT('MySQL', 3, 3, 'Postgre');
-- MyPostgre(从位置3开始替换5个字符,相当于到结尾)
SELECT INSERT('MySQL', 3, 5, 'Postgre'); -- MySQL,pos超出str的长度
SELECT INSERT('MySQL', 6, 0, 'Postgre');-- 138****5678,电话号码中间加星号
SELECT INSERT('13812345678', 4, 4, '****');
LPAD - 在字符串左侧填充指定的字符
**定义:**用于左填充字符串的函数,它可以在字符串左侧填充指定的字符,直到字符串达到指定长度。
**语法:**LPAD(str, len, padstr)
参数值
参数 | 描述 |
---|---|
str | 必需。原始字符串。 如果原始字符串的长度大于 length 参数,此函数将删除 str |
len | 必需。左填充后的字符串长度 |
padstr | 必需。左填充到 str 的字符串 |
示例
SELECT LPAD('123', 5, '0'); -- 返回 '00123'
SELECT LPAD('text', 10, '-'); -- 返回 '------text'
SELECT LPAD('中文', 6, '·'); -- 返回 '····中文'(实际显示取决于字符宽度)
RPAD - 在字符串右侧填充指定的字符
**定义:**用于右填充字符串的函数,它可以在字符串右侧填充指定的字符,直到字符串达到指定长度。
**语法:**RPAD(str, len, padstr)
参数值
参数 | 描述 |
---|---|
str | 必需。原始字符串。 如果原始字符串的长度大于 len 参数,此函数将删除 str |
len | 必需。右填充后的字符串长度 |
padstr | 必需。右填充到 str 的字符串 |
示例
SELECT RPAD('123', 5, '0'); -- 返回 '12300'
SELECT RPAD('text', 10, '-'); -- 返回 'text------'
SELECT RPAD('中文', 6, '·'); -- 返回 '中文····'(实际显示取决于字符宽度)
LCASE - 将字符串转换为小写
**定义:**用于将字符串转换为小写的函数,它与标准 SQL 中的 LOWER()
函数功能完全相同。
**语法:**LCASE(string)
参数值
参数 | 描述 |
---|---|
string | 必需。要转换的字符串 |
示例
SELECT LCASE('MySQL Tutorial'); -- 返回 'mysql tutorial'
SELECT LCASE('ABC123!@#'); -- 返回 'abc123!@#'
LOWER - 将字符串转换为小写
用于将字符串转换为小写的标准 SQL 函数,它与 MySQL 特有的 LCASE()
函数(上面)功能完全相同。
UCASE - 将字符串转换为大写
**定义:**将字符串转换为大写的函数,它与 UPPER()
函数功能完全相同,是字符串标准化处理的重要工具。
**语法:**UCASE(str)
参数值
参数 | 描述 |
---|---|
str | 必需。要转换的字符串 |
示例
SELECT UCASE('MySQL Tutorial'); -- 返回 'MYSQL TUTORIAL'
SELECT UCASE('abc123!@#'); -- 返回 'ABC123!@#'
SELECT UCASE('élégance'); -- 返回 'ÉLÉGANCE'(依赖排序规则)
SELECT UCASE('北京BEIJING'); -- 返回 '北京BEIJING'
UPPER - 将字符串转换为大写
用于将字符串转换为小写的标准 SQL 函数,它与 MySQL 特有的 UCASE ()
函数(上面)功能完全相同。
LEFT - 从字符串左侧提取指定数量字符
**定义:**用于从字符串左侧提取指定数量字符的函数,它是处理字符串截取的常用工具。
**语法:**LEFT(string, length)
参数值
参数 | 描述 |
---|---|
string | 必需。要从中提取的字符串 |
length | 必需。要提取的字符数。 如果该参数大于string中的字符数,该函数将返回string |
示例
SELECT LEFT('MySQL', 2); -- 返回 'My'
SELECT LEFT('数据库', 2); -- 返回 '数据'(中文字符处理)
SELECT LEFT('Hello', 10); -- 返回 'Hello'(超出长度安全处理)
RIGHT - 从字符串右侧提取指定数量字符
**定义:**用于从字符串右侧提取指定数量字符的函数,它与 LEFT()
函数相对应,专门处理字符串的右侧部分。
**语法:**RIGHT(str, len)
参数值
参数 | 描述 |
---|---|
str | 必需。要从中提取的字符串 |
len | 必需。要提取的字符数。 如果该参数大于str中的字符数,该函数将返回str |
示例
SELECT RIGHT('MySQL', 3); -- 返回 'SQL'
SELECT RIGHT('数据库', 1); -- 返回 '库'(中文字符处理)
SELECT RIGHT('Hello', 10); -- 返回 'Hello'(超出长度安全处理)
SELECT RIGHT('Text', 0); -- 返回 ''(空字符串)
SELECT RIGHT('Text', -1); -- 返回 NULL(负长度)
SELECT RIGHT(NULL, 2); -- 返回 NULL
MID - 从字符串的指定位置开始提取指定长度的字符
**定义:**用于提取子字符串的函数,它可以从字符串的指定位置开始提取指定长度的字符。这个函数与 SUBSTRING()
函数功能相同,提供了更灵活的字符串截取能力。
MID函数 和 SUBSTR函数, 等同于SUBSTRING函数。
**语法:**MID(string, start, len)
参数值
参数 | 描述 |
---|---|
string | 必需。要从中提取的字符串 |
start | 必需。起始位置。 可以是正数或负数。 如果是正数,则此函数从字符串的开头提取。 如果是负数,此函数从字符串的末尾提取 |
length | 必需。要提取的字符数 |
示例
SELECT MID('MySQL', 2, 3); -- 返回 'ySQ'
SELECT MID('数据库', 2, 1); -- 返回 '据'(中文字符处理)
SELECT MID('Hello', 3); -- 返回 'llo'(省略长度参数)
SELECT MID('Hello', -3, 2); -- 返回'll', 从末尾开始,位置-3,提取2个字符
SUBSTR - 从字符串的指定位置开始提取指定长度的字符
**定义:**用于截取子字符串的函数,它可以从指定位置开始提取字符串的一部分。这个函数与 SUBSTRING()
完全等效,提供了灵活的字符串截取能力。
MID函数 和 SUBSTR函数, 等同于SUBSTRING函数。
**语法:**SUBSTR(string, start, length)
参数值
参数 | 描述 |
---|---|
string | 必需。要从中提取的字符串 |
start | 必需。起始位置。 可以是正数也可以是负数。如果是正数,此函数从字符串的开头提取。 如果是负数,此函数从字符串的末尾提取 |
length | 可选。要提取的字符数。 如果省略,将返回整个字符串(从 start 位置开始) |
示例
SELECT SUBSTR('MySQL', 2, 3); -- 返回 'ySQ'
SELECT SUBSTR('数据库', 2, 1); -- 返回 '据'(中文字符处理)
SELECT SUBSTR('Hello', 3); -- 返回 'llo'(省略长度参数)
SELECT SUBSTR('Hello' FROM 2 FOR 3);-- 返回 'ell'(标准SQL语法)
SELECT SUBSTR('Hello', -3, 2); -- 返回 'll'(从倒数第3位开始)
SUBSTRING - 从字符串的指定位置开始提取指定长度的字符
与上面的 SUBSTR 函数等同。
MID函数 和 SUBSTR函数, 等同于SUBSTRING函数。
SUBSTRING_INDEX - 根据指定的分隔符从字符串中提取子串
**定义:**一个强大的字符串分割函数,它可以根据指定的分隔符从字符串中提取子串。这个函数特别适合处理具有固定分隔符的字符串数据。
**语法:**SUBSTRING_INDEX(string, delimiter, number)
参数值
参数 | 描述 |
---|---|
string | 必需。原字符串 |
delimiter | 必需。要搜索的分隔符 |
number | 必需。 搜索delimiter可以是正数或负数。 如果它是一个正数,这个函数返回所有到delimiter的左边。 如果是负数,这个函数返回delimiter右边的所有。 |
示例
SELECT SUBSTRING_INDEX('www.mysql.com', '.', 1); -- 返回 'www'
SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2); -- 返回 'www.mysql'
SELECT SUBSTRING_INDEX('www.mysql.com', '.', -1); -- 返回 'com'
SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2); -- 返回 'mysql.com'
SELECT SUBSTRING_INDEX('www.mysql.com', 'sql', 1); -- 返回 'www.my'
LTRIM - 去除字符串左侧空白字符
**定义:**用于去除字符串左侧空白字符的函数,它是数据清洗和字符串处理的重要工具。
**语法:**LTRIM(str)
参数值
参数 | 描述 |
---|---|
str | 必需。删除前导空格的字符串 |
示例
SELECT LTRIM(' MySQL'); -- 返回 'MySQL'
SELECT LTRIM('\t\n 数据 '); -- 返回 '\t\n 数据 '
SELECT LTRIM(' '), LTRIM(' ') = ''; -- 返回 ''(空字符串)
SELECT LTRIM(NULL); -- 返回 NULL
RTRIM - 去除字符串右侧空白字符
**定义:**用于去除字符串右侧空白字符的函数,它是数据清洗和字符串处理的重要工具。
**语法:**RTRIM(str)
参数值
参数 | 描述 |
---|---|
str | 必需。删除尾随空格的字符串 |
示例
SELECT RTRIM('MySQL '); -- 返回 'MySQL'
SELECT RTRIM('数据 \t\n'); -- 返回 '数据 \t\n'
SELECT RTRIM(' '), RTRIM(' ') = ''; -- 返回 ''(空字符串)
SELECT RTRIM(NULL); -- 返回 NULL
TRIM - 去除字符串两端空白字符或其他指定字符
**定义:**用于去除字符串两端空白字符或其他指定字符的函数,它是数据清洗和字符串处理的核心工具。
**语法:**TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)
简化形式:
TRIM(str) -- 去除两端空白
TRIM(remstr FROM str) -- 去除两端指定字符
TRIM(LEADING remstr FROM str) -- 去除左侧指定字符
TRIM(TRAILING remstr FROM str) -- 去除右侧指定字符
参数值
参数 | 描述 |
---|---|
str | 必需。要删除前导和尾随空格的字符串 |
示例
SELECT TRIM(' MySQL '); -- 返回 'MySQL'
SELECT TRIM(' \t\n数据 \t'); -- 返回 '数据'
SELECT TRIM(LEADING FROM ' text'); -- 返回 'text'
SELECT TRIM(TRAILING FROM 'text '); -- 返回 'text'
SELECT TRIM(BOTH '*' FROM '***text***');-- 返回 'text'
SELECT TRIM('x' FROM 'xxtextxx'); -- 返回 'text'
REPEAT - 将字符串重复指定的次数
**定义:**用于重复字符串的函数,它可以将指定字符串重复多次生成新的字符串。
**语法:**REPEAT(string, number)
参数值
参数 | 描述 |
---|---|
string | 必需。要重复的字符串 |
number | 必需。重复字符串的次数 |
示例
SELECT REPEAT('A', 5); -- 返回 'AAAAA'
SELECT REPEAT('数据', 2); -- 返回 '数据数据'
SELECT REPEAT('*-', 4); -- 返回 '*-*-*-*-'
SELECT REPEAT('text', 0); -- 返回 ''
SELECT REPEAT('text', -1), REPEAT('text', -1) = '', REPEAT('text', -1) is null; -- 返回 ''
SELECT REPEAT(NULL, 3); -- 返回 NULL
REPLACE - 将字符串中所有出现的指定子串替换为新的子串
**定义:**用于字符串替换的函数,它可以将字符串中所有出现的指定子串替换为新的子串。
**语法:**REPLACE(str, from_str, to_str)
参数值
参数 | 描述 |
---|---|
str | 必需。原字符串 |
from_str | 必需。被替换的子串 |
to_str | 必需。新的替换子串 |
示例
SELECT REPLACE('MySQL', 'SQL', 'Database'); -- 返回 'MyDatabase'
SELECT REPLACE('banana', 'a', 'o'); -- 返回 'bonono'
SELECT REPLACE('数据数据', '数据', '信息'); -- 返回 '信息信息'
SELECT REPLACE('text', 'x', NULL); -- 返回 NULL
REVERSE - 将字符串中的字符顺序完全颠倒
**定义:**用于反转字符串顺序的函数,它可以将字符串中的字符顺序完全颠倒。
语法:REVERSE(str)
参数值
参数 | 描述 |
---|---|
string | 必需。要反转的字符串 |
示例
SELECT REVERSE('MySQL'); -- 返回 'LQSyM'
SELECT REVERSE('12345'); -- 返回 '54321'
SELECT REVERSE('数据库'); -- 返回 '库据数'
SELECT REVERSE(NULL); -- 返回 NULL
SPACE - 生成指定数量空格字符串
**定义:**用于生成指定数量空格字符串的函数,它是格式化输出和字符串对齐的重要工具。
**语法:**SPACE(N)
参数值
参数 | 描述 |
---|---|
N | 必需。返回的空格字符数 |
示例
SELECT SPACE(5); -- 返回 ' '(5个空格)
SELECT SPACE(0), SPACE(0) = ''; -- 返回 ''(空字符串)
SELECT SPACE(-1), SPACE(-1) = ''; -- 返回 NULL
SELECT LENGTH(SPACE(3)); -- 返回 3
STRCMP - 比较两个字符串
**定义:**用于比较两个字符串的函数,它返回一个整数表示两个字符串的比较结果。
**语法:**STRCMP(str1, str2)
- 如果str1 = str2,这个函数返回0
- 如果 str1 < str2(字典序),这个函数返回-1
- 如果 str1 > str2(字典序),这个函数返回1
参数值
string1, string2 | 必需。要比较的两个字符串 |
---|
示例
SELECT STRCMP('text', 'text'); -- 返回 0(相等)
SELECT STRCMP('apple', 'banana'); -- 返回 -1(a < b)
SELECT STRCMP('Banana', 'apple'); -- 返回 1(B > a,ASCII码比较)
SELECT STRCMP('数据', '数据'); -- 返回 0(中文字符比较)
SELECT STRCMP(NULL, 'text'); -- 返回 NULL