MySQL 字符串操作
字符串截取
left(str, length)
mysql> select left('sqlstudy.com', 3); -- sql
right(str, length)
mysql> select right('sqlstudy.com', 3); -- com
substring(str, pos); substring(str, pos, len)
从字符串的第 4 个字符位置开始取,直到结束。
mysql> select substring('sqlstudy.com', 4); -- study.com
从字符串的第 4 个字符位置开始取,只取 2 个字符。
mysql> select substring('sqlstudy.com', 4, 2); -- st
从字符串的第 4 个字符位置(倒数)开始取,直到结束。
mysql> select substring('sqlstudy.com', -4); -- .com
从字符串的第 4 个字符位置(倒数)开始取,只取 2 个字符。
mysql> select substring('sqlstudy.com', -4, 2); -- .c
我们注意到在函数 substring(str, pos, len)
中,pos
可以是负值,但 len
不能取负值。
substring_index(str, delim, count)
截取第二个 '.' 之前的所有字符。
mysql> select substring_index('www.sqlstudy.com.cn', '.', 2); -- www.sqlstudy
截取倒数第二个 '.' 之后的所有字符。
mysql> select substring_index('www.sqlstudy.com.cn', '.', -2); -- com.cn
如果在字符串中找不到 delim
参数指定的值,就返回整个字符串
mysql> select substring_index('www.sqlstudy.com.cn', '.coc', 1); -- www.sqlstudy.com.cn
字符串连接
CONCAT(str1,str2,...)
返回来自于参数连结的字符串。如果任何参数是 NULL,返回 NULL。可以有超过 2 个的参数。一个数字参数被变换为等价的字符串形式。
select CONCAT('My', 'S', 'QL'); -- MySQL
select CONCAT(12.3); -- '12.3'
如果你想要明确地变换一个数字到一个字符串,把它作为参数传递到 CONCAT()
。
SELECT CONCAT(2,' test'); -- '2 test'
字符串长度 LENGTH(str)
计算字符串长度。
select length('text'); -- 4
查找
LOCATE(substr, str) 与 POSITION(substr IN str)
返回子串 substr 在字符串 str 第一个出现的位置,如果 substr 不是在 str 里面,返回 0.
select LOCATE('bar', 'foobarbar'); -- 4
select LOCATE('xbar', 'foobar'); -- 0
select POSITION('bar' IN 'foobarbar'); -- 4
select POSITION('xbar' IN 'foobarbar'); -- 0
LOCATE(substr, str, pos)
返回子串 substr 在字符串 str 第一个出现的位置,从位置 pos 开始。如果 substr 不是在 str 里面,返回 0。
select LOCATE('bar', 'foobarbar', 5); -- 7
INSTR(str, substr)
返回子串 substr 在字符串 str 中的第一个出现的位置。这的两个参数与 LOCATE()
前两个参数颠倒。
select INSTR('foobarbar', 'bar'); -- 4
select INSTR('xbar', 'foobar'); -- 0
ELT(N, str1, str2, str3, ...)
如果 N= 1,返回 str1,如果 N= 2,返回 str2,等等。如果 N 小于 1 或大于参数个数,返回 NULL。ELT()
是 FIELD()
反运算。
select ELT(1, 'ej', 'Heja', 'hej', 'foo'); -- 'ej'
FIELD(str, str1, str2, str3, ...)
返回 str 在 str1, str2, str3, ...清单的索引。如果 str 没找到,返回 0。FIELD()
是 ELT()
反运算。
select FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo'); -- 2
select FIELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo'); -- 0
FIND_IN_SET(str, strlist)
如果字符串 str 在由 N 子串组成的表 strlist 之中,返回一个 1 到 N 的值。一个字符串表是被“,”分隔的子串组成的一个字符串。如果第一个参数是一个常数字符串并且第二个参数是一种类型为 SET 的列,FIND_IN_SET()
函数被优化而使用位运算!如果 str 不是在 strlist 里面或如果 strlist 是空字符串,返回 0。如果任何一个参数是 NULL,返回 NULL。如果第一个参数包含一个“,”,该函数将工作不正常。
SELECT FIND_IN_SET('b','a,b,c,d'); -- 2
更改
LPAD(str, len, padstr)
返回字符串 str,左面用字符串 padstr 填补直到 str 是 len 个字符长。
select LPAD('hi',4,'??'); -- '??hi'
RPAD(str, len, padstr)
返回字符串 str,右面用字符串 padstr 填补直到 str 是 len 个字符长。
select RPAD('hi',5,'?'); -- 'hi???'
LTRIM(str)
返回删除了其前置空格字符的字符串 str。
select LTRIM(' barbar'); -- 'barbar'
RTRIM(str)
返回删除了其拖后空格字符的字符串 str。
select RTRIM('barbar '); --# 'barbar'
TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)
返回字符串 str,其所有 remstr 前缀或后缀被删除了。如果没有修饰符 BOTH
、LEADING
或 TRAILING
给出,BOTH
被假定。如果 remstr 没被指定,空格被删除。
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'
SPACE(N)
返回由 N 个空格字符组成的一个字符串。
select SPACE(6); -- ' '
REPLACE(str, from_str, to_str)
返回字符串 str,其字符串 from_str
的所有出现由字符串 to_str
代替。
select REPLACE('www.mysql.com', 'w', 'Ww'); -- 'WwWwWw.mysql.com'
REPEAT(str, count)
返回由重复 count 次的字符串 str 组成的一个字符串。如果 count <= 0,返回一个空字符串。如果 str 或 count 是 NULL,返回NULL。
select REPEAT('MySQL', 3); -- 'MySQLMySQLMySQL'
REVERSE(str)
返回颠倒字符顺序的字符串 str。
select REVERSE('abc'); -- 'cba'
INSERT(str, pos, len, newstr)
返回字符串 str,在位置 pos 起始的子串且 len 个字符长得子串由字符串 newstr 代替。
select INSERT('Quadratic', 3, 4, 'What'); -- 'QuWhattic'
LCASE(str)
LOWER(str) 返回字符串 str 的小写。
select LCASE('QUADRATICALLY'); -- 'quadratically'
UCASE(str)
返回字符串 str 的大写。
select UCASE('Hej'); -- 'HEJ'
LOAD_FILE(file_name)
读入文件并且作为一个字符串返回文件内容。文件必须在服务器上,你必须指定到文件的完整路径名,而且你必须有file权限。文件必须所有内容都是可读的并且小于max_allowed_packet。如果文件不存在或由于上面原因之一不能被读出,函数返回NULL。
mysql> UPDATE table_name SET blob_column=LOAD_FILE("/tmp/picture") WHERE id=1;
ASCII 码 转换
ASCII(str)
返回字符串 str 的最左面字符的 ASCII 代码值。如果 str 是空字符串,返回 0。如果 str 是 NULL,返回 NULL。
select ASCII('2'); -- 50
select ASCII(2); -- 50
select ASCII(''); -- 0
select ASCII(NULL); -- NULL
CHAR(N,...)
CHAR() 将参数解释为整数并且返回由这些整数的 ASCII 代码字符组成的一个字符串。NULL 值被跳过。
select CHAR(77, 121, 83, 81, NULL); -- MySQ
base64 函数
MySQL 在 5.6 版本的时候增加了 to_base64 和 from_base64 函数。
select to_base64('helloworld'); -- aGVsbG93b3JsZA==
select from_base64('aGVsbG93b3JsZA=='); -- helloworld
5.6版本之前的,具体查看原文:
https://blog.csdn.net/cjfeii/article/details/50980721
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 bin07280@qq.com
文章标题:MySQL 字符串操作
文章字数:1.7k
本文作者:Bin
发布时间:2018-11-13, 21:06:22
最后更新:2020-08-13, 22:55:18
原始链接:http://coolview.github.io/2018/11/13/MySQL/MySQL%20%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%93%8D%E4%BD%9C/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。