【MySQL】函数总结

作者:Leopold    访问量:5

★ CONCAT_WS

  • 语法:CONCAT_WS(separator,str1,str2,...)
  • 示例:CONCAT_WS(',',1,2,3)
  • 结果:1,2,3
  • 解释:连接字符串并拼接
  • Java替换:
    尽量使用MyBatis标签解决,其中kpointIds为List<Long>集合,存储需要分割的数字。
<foreach collection="kpointIds" item="id" open="(" close=")" separator=",">
    #{id,jdbcType=BIGINT}
</foreach>

★ FIND_IN_SET

  • 语法:FIND_IN_SET(str,strlist)
  • 示例:FIND_IN_SET('8',t.grade)
  • 解释:更精准的like
    有如下表:
idmathgrade
1高数A100,98,70
2高数B88,69,8

想查询出grade中含有’8’的成绩。比如:

idmathgrade
2高数B88,69,8

如果使用like子句查询,查询结果并不是按照逗号分割like,例如查询语句如下:

SELECT
	* 
FROM
	`test_find_in_set` t 
WHERE
	t.grade LIKE '%8%';

查询结果为:

idmathgrade
1高数A100,98,70
2高数B88,69,8

使用FIND_IN_SET的查询如下:

SELECT
	* 
FROM
	`test_find_in_set` t 
WHERE
	FIND_IN_SET('8',t.grade) ;

结果如下:

idmathgrade
2高数B88,69,8

★ GROUP_CONCAT

  • 语法:GROUP_CONCAT(expr)
  • 示例:
 SELECT
  g.`name`,
	GROUP_CONCAT(g.math)
FROM
	grade g
GROUP BY
	g.`name`

结果:

nameGROUP_CONCAT(g.math)
A95,100,90
B90,100,77

解释:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。

  • 延申:
SELECT
  g.`name`,
	GROUP_CONCAT(g.math order by g.math desc SEPARATOR '_')
FROM
	grade g
GROUP BY
	g.`name`

结果:

nameGROUP_CONCAT(g.math)
A100_95_90
B100_90_77

解释:可先对GROUP_CONCAT的内容排序并更换分隔符。

★ LPAD

  • 语法:LPAD(str,len,padstr)
  • 示例:select LPAD('123',5,3)
  • 结果:33123
  • 解释:填充字符串左边
  • Java替换:
private String lpad(String str) {
    return String.format("%04d", Integer.parseInt(str));
}

原理:0表示转换符,4表示总位数



如果您觉得此文章对您有帮助,欢迎评论转载!

您的每一次评论与转载,都是对作者极大的鼓励!

注意:除非注明,否则均为[Leopold's Blog]原创文章,转载必须以链接形式标明本文链接。

本文链接:https://www.yusong.site/leopold/805.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注