该如何才能与世界陷入爱河?

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`;

字符串函数1_LENGTH.png

注:在第一行中,“三体第二部 ”中一个汉字占三个字节,表一个字符,空格或数字 字母也算一个字符,所以字符长度为6;
但空格或数字字母只占一个字节,所以字节长度为16(15 + 1);
位数没什么好说的,这里采用的是utf8,乘8;


2. CONCAT(str1,str2,...) -- 拼接字符串

2.1. 函数:

  • CONCAT(str1,str2,...) : 多字符串拼接,若某一字段为null,则结果为null
  • CONCAT_WS(separator,str1,str2,...) : 多字符串拼接,并指定分隔符separator,若某一字段为null,结果不为null
  • GROUP_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`;

字符串函数2_CONCAT与CONCAT_WS.jpg


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;

字符串函数2_GROUP_CONCAT.jpg

  • 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`;
字符串函数3_INSERT.png

注:当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` ;

字符串函数4_LOWER与UPPER.jpg


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`;

字符串函数5_LEFT与RIGHT.jpg


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";

字符串函数6_TRIM.png


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 <> "";

字符串函数7_REPLACE.jpg

注: 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"; 

字符串函数8_SUBSTRING.jpg

注: 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 

字符串函数8_SUBSTRING_INDEX.png

注: cout为正数时表示从左往右开始取,cout为负数时表示从右往左开始取,cout大于分隔符数时,返回原字符串


9. REVERSE -- 反转字符串

9.1. 函数:

  • REVERSE(str):反转字符串

9.2. sql示例:

SELECT id,REVERSE(id),name,REVERSE(name) FROM `atctq_book`;

字符串函数9_REVERSE.jpg


posted @ 2022-01-23 18:56  hmpn  阅读(185)  评论(0编辑  收藏  举报