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 前缀或后缀被删除了。如果没有修饰符 BOTHLEADINGTRAILING 给出,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

http://justdo2008.iteye.com/blog/1141609

base64 函数

MySQL 在 5.6 版本的时候增加了 to_base64from_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" 转载请保留原文链接及作者。

目录