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'
来源:https://www.cnblogs.com/virde/p/mysql-string-function.html