MySql 所有字符串函数函数详解

  • ASCII(str)

返回str最左边第一位字符的ASCII编码,如果str为空,则返回 0 。如果str为NULL,则返回NULL

-- 只返回a的ASCII编码
SELECT ASCII('ab')
- 97
SELECT ASCII('a')
- 97 -- 如果是数字,带不带引号是一样的效果
SELECT ASCII(23)
- 50
SELECT ASCII(2)
- 50
SELECT ASCII('2')
- 50
  • BIN(N)

返回N的二进制数,N是数字类型,这个函数其实相当于CONV(N,10,2)。如果N是null则返回null,如果N是非数字的字符串则会返回0

SELECT BIN(2);
- 10
SELECT CONV(2,10,2);
- 10 SELECT BIN('23');
- 10111
SELECT CONV(23,10,2);
- 10111 SELECT BIN('n');
- 0
  • BIT_LENGTH(str)

返回str的二进制长度

SELECT BIT_LENGTH('test');
- 32 SELECT BIT_LENGTH('测');
- 24 SELECT BIT_LENGTH('你好啊');
- 72
  • CHAR(N,... [USING charset_name])

将所有参数转换为int类型数字,将数字所代表的字符连接之后返回。null值会被跳过

SELECT CHAR(77,121,83,81,'76');
- 'MySQL'
SELECT CHAR(77,77.3,'77.3');
- 'MMM'
  • CHAR_LENGTH(str)

返回str的长度,像汉字这样的多字节字符将计算为一个长度。

SELECT CHAR_LENGTH('你好啊');
- 3
SELECT CHAR_LENGTH('2个包子');
- 4
  • CHARACTER_LENGTH(str)

和CHAR_LENGTH(str)是一样的。

  • CONCAT(str1,str2,...)

把参数连接起来然后返回,可以有一个或者任意多个参数。如果所有参数都是非二进制字符串,那么返回结果也是非二进制字符串。反之,如果参数有任意一个二进制字符串,那么将返回一个二进制字符串。数字类型参数将被转换为等价的非二进制字符串。如果参数中有任意一个值为NULL,那么将返回NULL。

SELECT CONCAT('你','好','啊');
- '你好啊'
SELECT CONCAT('你',NULL,'啊');
- NULL
SELECT CONCAT(12.4);
- '12.4'
SELECT CONCAT(12.5,233);
- '12.5233'

带有引号的字符串放在一起会默认调用CONCAT函数

SELECT '啊' '哈哈'
- '啊哈哈'
  • CONCAT_WS(separator,str1,str2,...)

这个函数会用第一个参数separator作为分隔符将剩余参数连接起来,separator像其他参数一样可以是任意字符。separator如果是NULL值,将返回NULL

SELECT CONCAT_WS(',','First name','Second name','Last Name');
- 'First name,Second name,Last Name' SELECT CONCAT_WS(',','你',NULL,'谁');
- '你,谁' SELECT CONCAT_WS('舅,','大','二','三','');
- '大舅,二舅,三舅,' SELECT CONCAT_WS(NULL,'First name','Last Name');
- NULL

CONCAT_WS() 不会跳过空字符,比如上面的大舅二舅三舅,但是会跳过NULL值

  • ELT(N,str1,str2,str3,...)

ELT() 函数会返回其余参数中第 N 个值:N = 1,返回str1,N = 2 返回 str2.以此类推。

如果 N 大于参数个数或者小于1,,将返回 NULL。ELT函数和FIELD()函数互为补充

SELECT ELT(1,"第一","第二","第三","第四");
- '第一' SELECT ELT(4,"第一","第二","第三","第四");
- '第四' SELECT ELT(0,"第一","第二","第三","第四");
- NULL SELECT ELT(5,"第一","第二","第三","第四");
- NULL
  • FIELD(str,str1,str2,str3,...)

返回str在其余参数中的位置,如果在其余参数中未找到str,则返回 0 。

如果所有的参数都是字符类型,那么用字符类型进行比较。如果所有参数都是数字类型,那么用数字类型进行比较。其他情况将用double类型进行比较

如果str为NULL,将返回 0 ,因为NULL不能与其他参数做比较。

FIELD() 函数和ELT()函数互为补充

SELECT FIELD('ll', 'He', 'll', 'o', ',wor', 'ld!');
- 2
SELECT FIELD('没到', '午', '时', '已', '到');
- 0
  • EXPORT_SET(bits,on,off[,separator[,number_of_bits]])

在我看来很奇葩的一个函数,老实说不知道有什么用

这个函数会将第一个值 bits 转为 number_of_bits 长度的二进制数。(number_of_bits默认为64)。

从右向左检测这个二进制数,如果是 1 则得到一个 on 字符串,如果是 0 则得到一个off字符串。

将得到的所有结果从左向右用separator连接起来返回。separator默认为 ','

SELECT EXPORT_SET(5,'Y','N',',',4);
- 'Y,N,Y,N'

5转成4位长度的二进制是:

0101

对应:

NYNY

倒转加分隔得到结果:

Y,N,Y,N

  • FIND_IN_SET(str,strlist)

函数将返回str在strList中的位置,strList 是被 ',' 字符分隔的一串字符串。

这个函数太无聊了,看官方文档吧

https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_find-in-set

SELECT FIND_IN_SET('b','a,b,c,d');
- 2
  • FORMAT(X,D[,locale])

格式化一个数字,四舍五入至 D 位小数,返回结果是字符类型。

如果 D = 0 。返回结果就没有小数部分

可选项 local 指定本地化格式,默认为 'en_US',具体可用值可以参考这个文档

https://dev.mysql.com/doc/refman/5.7/en/locale-support.html

mysql> SELECT FORMAT(233.123456, 4);
-> '233.1235'
mysql> SELECT FORMAT(12332.1,4);
-> '12,332.1000'
mysql> SELECT FORMAT(12332.2,0);
-> '12,332'
mysql> SELECT FORMAT(12332.2,2,'de_DE');
-> '12.332,20'
  • FROM_BASE64(str)

不想翻译这个

  • HEX(str), HEX(N)

不想翻译这个

  • INSERT(str,pos,len,newstr)

将str第pos位开始len长度的字符替换为newstr,然后返回。

如果str没有pos位则返回str。

如果有任意一个参数为NULL,则返回NULL

SELECT INSERT('very What?', 6, 100, 'niubility');
- 'very niubility'
SELECT INSERT('中华人民共和国万岁', 8, 2, '万万岁');
- '中华人民共和国万万岁'
SELECT INSERT('为中华民族值崛起而读书', 6, 1, '之');
- '为中华民族之崛起而读书'
SELECT INSERT('小日本儿', 3, 100, '本本本本本本本本');
- '小日本本本本本本本本'

这个函数是多字节安全的

  • POSITION(substr IN str)

POSITION(substr IN str) 和 LOCATE(substr,str)功能是一样的

  • INSTR(str,substr)

返回substr在str中出现的第一个字母的位置。这个函数个LOCATE()函数作用是一样的,只不过参数顺序颠倒过来了。

SELECT INSTR('one car come,one car go', 'car');
- 5
SELECT INSTR('two car pengpeng,people die', 'PENGPENG');
- 9

这个函数是多字节安全的,一般不会区分大小写,只有任何一个参数为二进制字符类型时才会。

  • LOCATE(substr,str), LOCATE(substr,str,pos)

返回substr在str中出现的第一个字母的位置。

如果有pos值,从pos作为开始位置进行计算。

如果substr没有在str中,则返回0。

如果substr或者str为NULL则返回NULL。

SELECT LOCATE('车来车往', '车');
- 2
SELECT LOCATE('车来车往', '车', 2);
- 3
SELECT LOCATE('两车相撞,都死了', '你说啥');
- 0

这个函数是多字节安全的。一般不区分大小写,只有当某一参数为二进制类型才会。

  • LCASE(str)

LCASE()函数个LOWER()函数是一样的,名字不同而已。

  • LEFT(str,len)

截取返回str从左往右len长度的字符。如果任一参数为NULL,则返回NULL。

SELECT LEFT('你这样做是对的吗?', 7);
- '你这样做是对的'

这个函数是多字节安全的。

  • LENGTH(str)

返回str的字节长度。

SELECT LENGTH('text');
- 4 SELECT LENGTH("汉字");
- 6

因为是返回字节长度,utf8编码下一个汉字会占用三个字节,所以SELECT LENGTH("汉字")返回的是6.

latin1和gbk编码下汉字占用两个字节,所以如果是这两种编码,则SELECT LENGTH("汉字")会返回4.

如果是要取字符长度,可用CHAR_LENGTH()函数。

  • LOAD_FILE(file_name)

这个函数也是暂时不想翻译

  • LOWER(str)

将str转换为小写。根据编码进行,默认为latin1。

SELECT LOWER('THIS IS DAXIE');
- 'this is daxie'

LOWER() 和 UPPER() 对二进制字符类型(BINARY,VARBINARY,BLOB)是无效的。

这个函数是多字节安全的。

  • LPAD(str,len,padstr)

  • LTRIM(str)

去掉str左边的空格。

SELECT LTRIM('  barbar');
- 'barbar'

这个函数是多字节安全的

  • MAKE_SET(bits,str1,str2,...)

  • MID(str,pos,len)

MID(str,pos,len) is a synonym for SUBSTRING(str,pos,len).

  • OCT(N)

将N转换为八进制并返回。相当于CONV(N,10,8);

如果N为NULL,则返回NULL。

SELECT OCT(12);
- '14'
SELECT OCT(10);
- '12'
  • OCTET_LENGTH(str)

OCTET_LENGTH() 和 LENGTH() 功能是一样的

  • ORD(str)

  • QUOTE(str)

  • REPEAT(str,count)

将str重复count次然后返回。

如果count小于1,则返回空字符。

如果任一参数为NULL则返回NULL

SELECT REPEAT('啊~', 3);
- '啊~啊~啊~'
  • REPLACE(str,from_str,to_str)

将str中所有的from_str字段替换为to_str。区分大小写。

SELECT REPLACE('Oh~ OH~ Oh~', 'Oh~', 'OHH~');
- 'OHH~ OH~ OHH~'

这个函数是多字节安全的。

  • REVERSE(str)

颠倒返回str。

SELECT REVERSE('abc');
- 'cba'

这个函数是多字节安全的

  • RIGHT(str,len)

截取返回str最右边长度len的字符。任一字符为NULL则返回NULL。

SELECT RIGHT('foobarbar', 4);
- 'rbar'

这个函数是多字节安全的

  • RPAD(str,len,padstr)

  • RTRIM(str)

去掉str右边的空格。

SELECT RTRIM('barbar   ');
- 'barbar'

这个函数是多字节安全的

  • SOUNDEX(str)

  • expr1 SOUNDS LIKE expr2

  • SPACE(N)

返回N个空格。

SELECT SPACE(6);
- ' '
  • SUBSTR(str,pos), SUBSTR(str FROM pos), SUBSTR(str,pos,len), SUBSTR(str FROM pos FOR len)

SUBSTR() 和 SUBSTRING()函数功能是一样的。

  • SUBSTRING(str,pos), SUBSTRING(str FROM pos), SUBSTRING(str,pos,len), SUBSTRING(str FROM pos FOR len)

SUBSTRING(str,pos) 截取str从第pos位到结尾的字符,并返回

Sample:

SELECT SUBSTRING('12345678',3);
- '345678'

SUBSTRING(str FROM pos) 效果和SUBSTRING(str,pos)是一样的,语法不同而已。

SUBSTRING(str,pos,len) 中len值是指定截取长度。

Sample:

SELECT SUBSTRING('12345678',3,2);
- '34'

pos的值为正整数时从左往右数,当为负整数时,则是从右往左数。

Sample

SELECT SUBSTRING('12345678',-3);
- '678' SELECT SUBSTRING('87654321',-4,2);
- '43'

这个函数是多字节安全的。

  • SUBSTRING_INDEX(str,delim,count)

懒得翻译了,直接看代码吧

SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
- 'www.mysql'
SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
- 'mysql.com'

Mysql 字符函数详解的更多相关文章

  1. Mysql 字符串函数 详解

    字符串函数是最常用的一种函数了,如果大家编写过程序的话,不妨回过头去看看自己使用过的函数,可能会惊讶地发现字符串处理的相关函数占已使用过的函数很大一部分.MySQL中字符串函数也是最丰富的一类函数,表 ...

  2. mysql find_in_set函数详解

    Mysql函数FIND_IN_SET()的使用方法 有了FIND_IN_SET这个函数.我们可以设计一个如:一只手机即是智能机,又是Andriod系统的. 比如:有个产品表里有一个type字段,他存储 ...

  3. mysql string types ---- mysql 字符类型详解

    一.mysql 中包涵的字符类型: [national] char [(m)] [character set charset_name] [collate collation_name] [natio ...

  4. mysql group_concat函数详解

    group_concat( [DISTINCT]  要连接的字段   [Order BY 排序字段 ASC/DESC]   [Separator '分隔符'] ) 1. --以id分组,把price字 ...

  5. MYSQL常用内置函数详解说明

    函数中可以将字段名当作变量来用,变量的值就是该列对应的所有值:在整理98在线字典数据时(http://zidian.98zw.com/),有这要一个需求,想从多音字duoyinzi字段值提取第一个拼音 ...

  6. 【转载】C语言itoa()函数和atoi()函数详解(整数转字符C实现)

    本文转自: C语言itoa()函数和atoi()函数详解(整数转字符C实现) 介绍 C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串. int/float to ...

  7. Python2.7字符编码详解

    目录 Python2.7字符编码详解 声明 一. 字符编码基础 1.1 抽象字符清单(ACR) 1.2 已编码字符集(CCS) 1.3 字符编码格式(CEF) 1.3.1 ASCII(初创) 1.3. ...

  8. MySQL简单查询详解-单表查询

    MySQL简单查询详解-单表查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询的执行路径 一条SQL查询语句的执行过程大致如下图所示: 1>.客户端和服务端通过my ...

  9. MySQL数据库优化详解(收藏)

    MySQL数据库优化详解 mysql表复制 复制表结构+复制表数据mysql> create table t3 like t1;mysql> insert into t3 select * ...

随机推荐

  1. 微信公众号开发——创建自定义菜单(PHP版)

    <?php include "TokenUtil.php"; //TokenUtil::build_access_token(); $access_token = Token ...

  2. ubuntu 12.04 samba 配置(转载)

    转自:http://blog.sina.com.cn/s/blog_a5b607f801013av9.html 首先当然是要安装samba了,呵呵: 代码: sudo apt-get install ...

  3. 项目迁移腾讯云后,用户反馈,https证书不匹配。

    腾讯云大禹高防大禹BGP同一IP绑定多个证书,用户反馈无法匹配我们域名对应证书.但是浏览器是支持的.定位为客户端不支持sni在运维检查lb及高防证书关联无误,定位发现是用户端httpclient没有设 ...

  4. 11.3NOIP模拟赛

    /* 考虑贪心 把原序列排序后,对于原中位数往后所有比要更改到的值小的都改成它 正确性显然. */ #include<iostream> #include<cstdio> #i ...

  5. 洛谷P4364 [九省联考2018]IIIDX(线段树)

    传送门 题解看得……很……迷? 因为取完一个数后,它的子树中只能取权值小于等于它的数.我们先把权值从大到小排序,然后记$a_i$为他左边(包括自己)所有取完他还能取的数的个数.那么当取完一个点$x$的 ...

  6. 三分钟掌握docker基本指令

    一下内容是我用markdown编辑的,所以排版不是太ok~ # Docker ## 1.核心概念 docker主机(Host):安装了docker程序的机器.docker直接安装再操作系统上. doc ...

  7. 解题报告:hdu 1556 Color the ball(区间修改,单点查询)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 Problem Description N个气球排成一排,从左到右依次编号为1,2,3....N ...

  8. android:process用法

    1.作用 android:process将组件在新进程中运行. 2.应用范围 可以出现在<application>  <activity>, <service>,  ...

  9. Android开发学习——游戏开发小demo

    public class MainActivity extends Activity { private GameUI gameUI; @Override protected void onCreat ...

  10. thinkphp3.2 + soap

    服务器配置 扩展libxml2下载地址:http://xmlsoft.org/downloads.html 在windows下的php.ini文件里 找到这一行代码(如没有则自行添加) extensi ...