写点什么

🐬【MySQL 技术导航】常用函数介绍(1)

发布于: 4 小时前
🐬【MySQL技术导航】常用函数介绍(1)

概念

相当于 java 中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名 1)隐藏了实现细节 2)提高代码的可重用性

使用

select 函数名(实参列表)【from 表】 【】中内容可省略

正文

字符函数:

  • length: 获取字节个数(utf-8 一个汉字为 3 个字节,gbk 为 2 个字节)

SELECT LENGTH('cbuc')    

# 输出 4SELECT LENGTH('蔡不菜cbuc')   # 输出13

  • concat: 拼接字符串

 SELECT CONCAT('C','_','BUC')   # 输出 C_BUC
复制代码
  • upper:将字母变成大写

 SELECT UPPER('cbuc')    # 输出 CBUC
复制代码
  • lower:将字母变成小写

 SELECT LOWER('CBUC')   # 输出 cbuc
复制代码
  • substr / substring:裁剪字符串该方法进行了重构


substr(str,pos)       # str:要裁剪的字符串 , pos:要裁剪的长度substr(str,pos,len)   # str:要裁剪的字符串 , pos/len:从哪个位置开始裁剪几位# substring同理

  • instr:返回子串第一次出现的索引,如果没有则返回 0

 SELECT INSTR('蔡不菜','蔡')        # 输出 1 (mysql是从1开始算位数)
复制代码
  • trim:字符串去【字符】

SELECT TRIM('  cbuc  ')                 # 输出 cbucSELECT TRIM('a' from 'aaaacbucaaaa')    #输出 cbuc

  • lpad:用指定字符实现左填充指定长度

 SELECT LPAD('cbuc',6,'*')            # 输出 **cbuc
复制代码
  • rpad:用指定字符实现右填充指定长度

 SELECT LPAD('cbuc',6,'*')            # 输出 cbuc**
复制代码
  • replace 替换

SELECT REPLACE('小菜爱睡觉','睡觉','吃饭')        # 输出 小菜爱吃饭
复制代码
数学函数
  • round:四舍五入

SELECT round(1.5)        # 输出  2SELECT round(-1.5)        # 输出 -2 该四舍五入计算方式为:绝对值四舍五入加负号

  • ceil:向上取整,返回>=该参数的最小整数

SELECT CEIL(1.5);        # 输出  2SELECT CEIL(-1.5);        # 输出 -1

  • floor:向下取整,返回<=该参数的最大整数

SELECT FLOOR(1.5);        # 输出  1SELECT FLOOR(-1.5);        # 输出 -2

  • truncate:截断

SELECT TRUNCATE(3.1415926,2);        # 输出 3.14
复制代码
  • mod:取余

SELECT MOD(10,3);        # 输出 1SELECT MOD(10,-3);        # 输出 1

日期函数
  • now:返回当前系统日期+时间

SELECT NOW()               # 输出 2020-02-16 11:43:21
复制代码
  • curdate:返回当前系统日期,不包含时间

SELECT CURDATE()        # 输出 2020-02-16
复制代码
  • curtime:返回当前时间,不包含日期

 SELECT CURTIME()        # 输出 11:45:35
复制代码
  • year/month/day 可以获取指定的部分,年、月、日、小时、分钟、秒

SELECT YEAR(NOW())        # 输出 2020   其他用法一致
复制代码
  • str_to_date:将字符通过指定的格式转换成日期

SELECT STR_TO_DATE('02-17 2020','%c-%d %Y')      # 输出 2020-02-17
复制代码
  • date_format:将日期转换成字符

 SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日')        # 输出 2020年02月17日
复制代码
  • datediff:两个日期天数之差

 SELECT DATEDIFF(NOW(),'2020-02-12')           # 输出    5
复制代码
其他函数
  • VERSION:查看 mysql 版本

SELECT VERSION();           # 输出 5.7.17
复制代码
  • DATABASE:查看当前数据库

 SELECT DATABASE()          # 输出 cbuc_datebase
复制代码
  • USER:查看当前用户

 SELECT USER()               # 输出 root@localhost
复制代码
流程控制函数
  • if 函数: 类似三目运算

 SELECT IF(10<5,'大','小')        # 输出 小
复制代码
  • case 函数:case 有两种用法

1 switch case 的效果

case 要判断的字段或表达式when 常量1 then 要显示的值1或语句1;when 常量2 then 要显示的值2或语句2;...else 要显示的值n或语句n;end

2 类似于多重 if case

when 条件1 then 要显示的值1或语句1when 条件2 then 要显示的值2或语句2...else 要显示的值n或语句n

end


FIND_IN_SET(str,strlist)


如果字符串 str 在由 N 子串组成的表 strlist 之中,返回一个 1 到 N 的值。一个字符串表是被“,”分隔的子串组成的一个字符串。如果第一个参数是一个常数字符串并且第二个参数是一种类型为 SET 的列,FIND_IN_SET()函数被优化而使用位运算!如果 str 不是在 strlist 里面或如果 strlist 是空字符串,返回 0。如果任何一个参数是 NULL,返回 NULL。如果第一个参数包含一个“,”,该函数将工作不正常。


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


返回一个集合 (包含由“,”字符分隔的子串组成的一个字符串),由相应的位在 bits 集合中的的字符串组成。str1 对应于位 0,str2 对应位 1,等等。在 str1, str2, ...中的 NULL 串不添加到结果中。mysql> SELECT MAKE_SET(1,'a','b','c');    -> 'a'mysql> SELECT MAKE_SET(1 | 4,'hello','nice','world');    -> 'hello,world'mysql> SELECT MAKE_SET(0,'a','b','c');    -> ''


发布于: 4 小时前阅读数: 9
用户头像

🏆2021年InfoQ写作平台-签约作者 🏆 2020.03.25 加入

👑【酷爱计算机技术、醉心开发编程、喜爱健身运动、热衷悬疑推理的”极客狂人“】 🏅 【Java技术领域,MySQL技术领域,APM全链路追踪技术及微服务、分布式方向的技术体系等】 我们始于迷惘,终于更高水平的迷惘

评论

发布
暂无评论
🐬【MySQL技术导航】常用函数介绍(1)