MySQL 字符串函数:字符串截取
目录
基础截取函数
LEFT/RIGHT - 从左/右端截取
select left('sqlstudy.com', 3); -- 结果: sql
select right('sqlstudy.com', 3); -- 结果: com
SUBSTRING - 按位置截取
-- 从第 4 个字符位置开始取,直到结束
select substring('sqlstudy.com', 4); -- 结果: study.com
-- 从第 4 个字符位置开始,取 2 个字符
select substring('sqlstudy.com', 4, 2); -- 结果: st
-- 从第 4 个字符位置(倒数)开始取,直到结束
select substring('sqlstudy.com', -4); -- 结果: .com
-- 从第 4 个字符位置(倒数)开始,取 2 个字符
select substring('sqlstudy.com', -4, 2); -- 结果: .c
注意:在 SUBSTRING(str, pos, len) 中,pos 可以是负值,但 len 不能取负值。
SUBSTRING_INDEX - 按分隔符截取
-- 截取第 2 个 '.' 之前的所有字符
select substring_index('www.sqlstudy.com.cn', '.', 2);
-- 结果: www.sqlstudy
-- 截取第 2 个 '.'(倒数)之后的所有字符
select substring_index('www.sqlstudy.com.cn', '.', -2);
-- 结果: com.cn
-- 如果找不到分隔符,返回整个字符串
select substring_index('www.sqlstudy.com.cn', '.coc', 1);
-- 结果: www.sqlstudy.com.cn
字符信息函数
ASCII - 返回字符的 ASCII 码
select ASCII('2'); -- 结果: 50
CHAR - 将 ASCII 码转换为字符
select CHAR(77, 121, 83, 81, NULL); -- 结果: MySQ
LENGTH - 字符串长度
select length('text'); -- 结果: 4
字符串搜索函数
LOCATE/INSTR - 查找子字符串位置
-- LOCATE 返回子串在字符串中第一个出现的位置,从位置 pos 开始
select LOCATE('bar', 'foobarbar'); -- 结果: 4
select LOCATE('bar', 'foobarbar', 5); -- 结果: 7
select LOCATE('xbar', 'foobar'); -- 结果: 0
-- INSTR 作用相同,参数顺序相反
select INSTR('foobarbar', 'bar'); -- 结果: 4
字符串填充和修剪函数
LPAD/RPAD - 左/右填充
select LPAD('hi', 4, '??'); -- 结果: ??hi
select RPAD('hi', 5, '?'); -- 结果: hi???
LTRIM/RTRIM/TRIM - 去除空格
select LTRIM(' barbar'); -- 结果: barbar
select RTRIM('barbar '); -- 结果: barbar
select TRIM(' bar '); -- 结果: bar
select TRIM(LEADING 'x' FROM 'xxxbarxxx'); -- 结果: barxxx
select TRIM(BOTH 'x' FROM 'xxxbarxxx'); -- 结果: bar
select TRIM(TRAILING 'xyz' FROM 'barxxyz'); -- 结果: barx
字符串变换函数
CONCAT - 字符串连接
select CONCAT('My', 'S', 'QL'); -- 结果: MySQL
select CONCAT(12.3); -- 结果: '12.3'
REPLACE - 字符串替换
select REPLACE('www.mysql.com', 'w', 'Ww'); -- 结果: WwWwWw.mysql.com
REPEAT - 字符串重复
select REPEAT('MySQL', 3); -- 结果: MySQLMySQLMySQL
REVERSE - 字符串反转
select REVERSE('abc'); -- 结果: cba
UPPER/LOWER - 大小写转换
select UCASE('Hej'); -- 结果: HEJ
select LCASE('QUADRATICALLY'); -- 结果: quadratically
高级函数
FIELD/FIND_IN_SET - 集合搜索
-- FIELD 返回 str 在列表中的索引,从 1 开始
select FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo'); -- 结果: 2
-- FIND_IN_SET 搜索逗号分隔列表中的位置
select FIND_IN_SET('b', 'a,b,c,d'); -- 结果: 2
MAKE_SET - 按位构建集合
select MAKE_SET(1, 'a', 'b', 'c'); -- 结果: a
select MAKE_SET(1 | 4, 'hello', 'nice', 'world'); -- 结果: hello,world
其他实用函数
INSERT - 字符串替换
select INSERT('Quadratic', 3, 4, 'What'); -- 结果: QuWhattic
LOAD_FILE - 读取文件内容
UPDATE table_name
SET blob_column = LOAD_FILE("/tmp/picture")
WHERE id = 1;
文件必须在服务器上,需要有 FILE 权限。
类型自动转换
MySQL 必要时自动在字符串和数字间转换:
SELECT 1 + "1"; -- 结果: 2
SELECT CONCAT(2, ' test'); -- 结果: '2 test'