MySQL函数学习(一)-----字符串函数
注:笔记旨在记录
一、MySQL 字符串函数
\ | 函 数 名 称 | 作 用 | 完 成 |
---|---|---|---|
1 | LENGTH |
计算字符串长度 | 勾 |
2 | CONCAT |
字符串拼接,返回结果为连接参数产生的字符串 | 勾 |
3 | INSERT |
将原字符串的第pos-pos+len位替换为newstr | 勾 |
4 | LOWER |
将字符串中的字母转换为小写 | 勾 |
4 | UPPER |
将字符串中的字母转换为大写 | 勾 |
5 | LEFT |
从左侧字截取符串,返回字符串左边的若干个字符 | 勾 |
5 | RIGHT |
从右侧字截取符串,返回字符串右边的若干个字符 | 勾 |
6 | TRIM |
删除字符串左右两侧的空格 | 勾 |
7 | REPLACE |
字符串替换函数,返回替换后的新字符串 | 勾 |
8 | SUBSTRING |
截取字符串,返回从指定位置开始的指定长度的字符换 | 勾 |
9 | REVERSE |
字符串反转(逆序)函数,返回与原始字符串顺序相反的字符串 | 勾 |
1. LENGTH(str) -- 计算长度
1.1. 函数:
CHAR_LENGTH(str)、CHARACTER_LENGTH(str)
: 计算 字符 长度LENGTH(str)、OCTET_LENGTH(str)
: 计算 字节 长度BIT_LENGTH(str)
: 计算 位 数:UNCOMPRESSED_LENGTH(str)
注:以上函数唯一参数都为
字段名
或字符串str
1.2. sql示例:
SELECT name,
CHAR_LENGTH(name) as "CHAR_LENGTH(name) ",CHARACTER_LENGTH(name) as "CHARACTER_LENGTH(name) ",
LENGTH(name) as "LENGTH(name)",OCTET_LENGTH(name) as "OCTET_LENGTH(name)",
BIT_LENGTH(name) as "BIT_LENGTH(name)",UNCOMPRESSED_LENGTH(name)
FROM `atctq_book`;
注:在第一行中,“三体第二部 ”中一个汉字占三个字节,表一个字符,空格或数字 字母也算一个字符,所以字符长度为6;
但空格或数字字母只占一个字节,所以字节长度为16(15 + 1);
位数没什么好说的,这里采用的是utf8,乘8;
2. CONCAT(str1,str2,...) -- 拼接字符串
2.1. 函数:
CONCAT(str1,str2,...)
: 多字符串拼接,若某一字段为null,则结果为nullCONCAT_WS(separator,str1,str2,...)
: 多字符串拼接,并指定分隔符separator,若某一字段为null,结果不为nullGROUP_CONCAT(expr)
: 将某字段的所有值拼接,可排序,可指定分隔符,若某一字段为null,结果不为null
注:推荐用concat_ws代替concat,避免因值为空导致的结果为null。
2.2. sql示例:
SELECT name,auth,concat(name,"(",auth,")"),CONCAT_WS(",",id,code,name,auth) FROM `atctq_book`;
select type_id,GROUP_CONCAT(name),GROUP_CONCAT(name order by code separator '_'),
GROUP_CONCAT(concat(code,"_",name) order by code)
from atctq_book group by type_id;
GROUP_CONCAT
要搭配GROUP BY来使用,将某字段的所有值拼接一起,可排序
,可使用separator
指定分隔符。 与concat_ws一样,若某字段为null,最终结果只会忽略该字段,不会为null。
3. INSERT(str,pos,len,newstr) -- 插入替换字符串
3.1. 函数:
INSERT(str,pos,len,newstr)
: 将原字符串的第pos-pos+len位替换为newstr
注: str表示处理的初始字符串,pos表示从str的第几位开始插入,len表示插入的长度,newstr表示插入的字符串。
3.1. sql示例:
SELECT code,name,
INSERT(name,-1,2,"No.2"),
INSERT(name,4,1,"2"),
INSERT(name,3,2,"No.2"),
INSERT(name,3,20,"No.2"),
LAST_INSERT_ID()
FROM `atctq_book`;
注:当pos超过str长度时,会直接返回str作为结果。
当len超过str剩余长度(pos位往后)时,会将pos位往后的所有替换为newstr
LAST_INSERT_ID(): 获取最后插入的ID值
4. LOWER、UPPER -- 字符串大小转换
4.1. 函数:
LOWER(str)
: 将字符串全部转为小写UPPER(str)
: 将字符串全部转为大写
4.2. sql示例:
SELECT code,LOWER(code), id,UPPER(id) FROM `atctq_book` ;
5. LEFT、RIGHT -- 取字符串
5.1. 函数:
LEFT(str,len)
: 取字符串从左往右的若干各字符RIGHT(str,len)
: 取字符串从右往左的若干各字符
5.2. sql示例:
SELECT code,name,LEFT(name,2),RIGHT(name,3) FROM `atctq_book`;
6. TRIM(str) -- 删除空格
6.1. 函数:
TRIM(BOTH FROM str)
等同于TRIM(str)
::删除左右俩侧空格TRIM(LEADING FROM str)
等同于LTRIM(str)
: 删除左侧空格TRIM(TRAILING FROM str)
等同于RTRIM(str)
: 删除右侧空格
6.2. sql示例:
SELECT code,name,auth,TRIM(auth),TRIM(BOTH FROM auth),
LTRIM(auth),TRIM(LEADING FROM auth),
RTRIM(auth),TRIM(TRAILING FROM auth)
FROM `atctq_book` WHERE type_id = "0001";
7. REPLACE -- 替换字符串
7.1. 函数:
REPLACE(str,from_str,to_str)
: 将str字符串中的from_str字符串替换为to_str
7.2. sql示例:
SELECT res,length(res) as "res长度",replace(res,'1',"") as "除去1后res",
length(replace(res,'1',"")) as "res除去1后长度",
length(res)-length(replace(res,'1',"")) as "res中1个数"
FROM `atctq_book` where res is not null and res <> "";
注: from_str和to_str不能为null,否则直接返回结果null。
与INSERT的区别:INSERT是从第n位到m位插入字符串,而REPLACE是把原字符串中所有from_str替换为to_str
8. SUBSTRING -- 取子字符串
8.1. 函数:
SUBSTRING(str,pos)
等同于SUBSTRING(str from pos)
: 取str第pos个字符后的字符串SUBSTRING(str,pos,len)
等同于SUBSTRING(str from pos for len)
: 取str第pos个字符后长度为len的字符串SUBSTRING_INDEX(str,delim,count)
: delim为分隔符,取str第count个分隔符前字符串
8.2. sql示例:
SELECT code,name,SUBSTRING(name,3),SUBSTRING(name from 3),
SUBSTRING(name,4,5),SUBSTRING(name from 4 for 1),
SUBSTRING(name,-2),SUBSTRING(name,-4,2),
FROM `atctq_book` WHERE type_id = "0001";
注: pos为正数时表示从第pos个字符开始取
pos为负数时表示从倒数第pos个字符开始取
SELECT u.tt1,SUBSTRING_INDEX(u.tt1,".",1), SUBSTRING_INDEX(u.tt1,".",2),
SUBSTRING_INDEX(u.tt1,".",3), SUBSTRING_INDEX(u.tt1,".",4)
from (SELECT "www.this.is.test.cn " as tt1) u
注: cout为正数时表示从左往右开始取,cout为负数时表示从右往左开始取,cout大于分隔符数时,返回原字符串
9. REVERSE -- 反转字符串
9.1. 函数:
REVERSE(str)
:反转字符串
9.2. sql示例:
SELECT id,REVERSE(id),name,REVERSE(name) FROM `atctq_book`;