Mysql005:函数

函数概念:如果学过编程语言,那这个就很好理解,mysql的函数就和编程语言的内置关键字一样,都是官方提前编译好了给我们使用的,如python的print函数,如java的println函数。没学过编程也不难,就把它理解成mysql的关键字就行,它本来也就是关键字,各有各的功能,我们拿来用就行。

目录:

1. 字符串函数

2. 数值函数

3. 日期函数

4. 流程函数

1. 字符串函数

函数名功能
CONCAT(str1, str2)将多个字符连接在一起
UPPER(str)将小写转成大写
LOWER(str)将大写转成小写
LENGTH(str)获取字符串长度
LEFT(str, len)从字符串的左边开始提取指定长度的字符,并返回结果。
RIGHT(str, len)从字符串的右边开始提取指定长度的字符,并返回结果。
SUBSTRING(str, pos)提取字符串中从指定位置开始的子字符串,并返回结果。
TRIM(str)去除字符串两端的空格,并返回处理后的结果。
REPLACE(str, old, new)在字符串中替换指定的子串为新的子串,并返回结果。
INSTR(str, substr)返回子串在字符串中第一次出现的位置,如果不存在则返回 0。
LPAD(str, len, pad)将字符串左对齐,并在左侧填充指定字符,直到达到指定长度。
RPAD(str, len, pad)将字符串右对齐,并在右侧填充指定字符,直到达到指定长度。
REVERSE(str)反转字符串中的字符顺序,并返回结果。
SUBSTRING_INDEX(str, delimiter, count)在字符串中根据指定的分隔符提取指定次数的子串,并返回结果。

是有点多,但是你不用记,想用就查一下就行,不是很难。这些函数有什么用呢?那就大有用处啦,假如让你写一段sql,查询今天的销量,这时你的日期不能写死吧?不然你今天写的sql拿到明天就不能用了,这时函数就可以派上用场了,它可以自动获取当天的日期,懂得都懂了哈。

这里就讲解前5个函数的功能,

CONCAT(str1, str2):将多个字符连接在一起

UPPER(str):将小写转成大写

LOWER(str):将大写转成小写

LENGTH(str):获取字符串长度

LEFT(str, len):从字符串的左边开始提取指定长度的字符

2. 数值函数

常见的数值函数
函数关键字功能
ABS(x)取绝对值,即去掉其负号。
ROUND(x,d)按x取四舍五入,d保留小数的位数
FLOOR(x)向下取整
CEILING(x)向上取整
RAND()返回一个0~1之内随机数。
MOD(x, y)取余
POWER(x, y)返回 x 的 y 次幂。
SQRT(x)返回给定数值的平方根。
SIGN(x)返回给定数值的符号。如果 x 是正数,则返回 1;如果 x 是负数,则返回 -1;如果 x 是 0,则返回 0。
TRUNCATE(x, d)将给定数值按指定的小数位数截断。
LOG(x)返回给定数值以自然对数(底数为 e)为基的对数值。
LOG10(x)返回给定数值以 10 为基的对数值。
EXP(x)返回 e 的给定幂次方。
LEAST(x1, x2, ..., xn)返回给定多个数值中的最小值。
GREATEST(x1, x2, ..., xn)返回给定多个数值中的最大值。

演示前5个,剩余的也不难,网上查一下就知道怎么使用了

2.1 ABS(x)  :取绝对值,即去掉其负号。

select ABS(-1); -- 返回1

select ABS(1); -- 返回1

select ABS(-1.4); -- 返回1.4

2.2 ROUND(x,d):按x取四舍五入,d保留小数的位数

select ROUND(3.1415926,0); -- 返回3

select ROUND(3.1415926,3); -- 返回3.141

select ROUND(3.1415926,4); -- 返回3.1415

2.3 FLOOR(x):向下取整

select FLOOR(2.1); -- 返回2

select FLOOR(2.8); -- 返回2

select FLOOR(2.9); -- 返回2

2.4 CEILING(x):向上取整

select CEILING(2.1); -- 返回3

select CEILING(2.8); -- 返回3

select CEILING(2.9); -- 返回3

2.5 RAND():返回一个0~1之内随机数

这个不好演示, 因为它返回的是一个随机数。如下

select RAND(); -- 随机返回0.10286967465921275

select RAND(); -- 随机返回0.7462309028452551

......

生成5位数之内的随机数:

SELECT FLOOR(RAND()*100000); -- 生成5位数之内的随机数

生成1到10之内的随机数,可以这样做:

SELECT FLOOR(RAND() * 10) + 1;

生成2到5之内的随机数,可以这样做:稍微思考一下,或者拿数字代入算一下,你就会知道原理

SELECT FLOOR(RAND() * 4) + 2;

3. 日期函数

日期函数
函数描述
DATE()提取日期部分,返回日期字符串。
TIME()提取时间部分,返回时间字符串。
NOW()返回当前日期和时间。
CURDATE()返回当前日期。
CURTIME()返回当前时间。
YEAR()提取年份部分,返回年份。
MONTH()提取月份部分,返回月份。
DAY()提取日期部分,返回日期。
HOUR()提取小时部分,返回小时值。
MINUTE()提取分钟部分,返回分钟值。
SECOND()提取秒部分,返回秒值。
DAYOFWEEK()返回星期几的索引 (1 = 星期日, 2 = 星期一, … , 7 = 星期六)。
DAYOFMONTH()返回当前月中的天数。
DAYOFYEAR()返回当前年份的天数。
WEEK()返回一年中的周数。
QUARTER()返回当前日期的季度 (1, 2, 3, 4)。
TIMESTAMPDIFF()返回两个日期之间的差距(以指定的单位计算)。
DATE_FORMAT()根据指定的格式,格式化日期为字符串。
STR_TO_DATE()将字符串转换为日期,根据指定的格式。

3.1 DATE():提取日期部分,返回日期字符串。

在date()里的日期需保证完整的日期格式,否则无法识别,只要有符号隔开年月日它就可以识别,不一定非得用-,注意它提取是日期

SELECT DATE('2023-09-23 12:34:56'); -- 提取日期部分并返回 '2023-09-23'

3.2 TIME():提取时间部分,返回时间字符串。

上面DATE提取的是日期,这个提取的是时间,其它规则相同

SELECT TIME('2023-09-23 12:34:56'); -- 提取时间部分并返回 '12:34:56'

3.3 NOW():返回当前日期和时间。

这个函数就简单明了不用我解释了吧

select NOW(); -- 返回当前日期和时间,格式为:2023-09-23 08:29:24

3.4 CURDATE():返回当前日期。

select CURDATE(); -- 返回当前日期,格式为:2023-09-23

3.5 CURTIME():返回当前时间。

select CURTIME(); -- 返回当前时间,格式为:08:29:24

4. 流程函数

流程控制函数
函数描述
IF()如果条件为真,返回一个值;否则返回另一个值。
CASE在满足条件的情况下返回不同的值。
COALESCE()返回参数列表中的第一个非 NULL 值。
NULLIF()如果两个参数相等,则返回 NULL;否则返回第一个参数。
IFNULL()如果第一个参数不为 NULL,则返回第一个参数;否则返回第二个参数。
IIF()如果条件为真,则返回第一个值;否则返回第二个值。
GREATEST()返回参数列表中的最大值。
LEAST()返回参数列表中的最小值。
RAND()返回 0 到 1 之间的随机浮点数。
ROUND()

对一个数进行四舍五入。

流程控制函数在sql中使用的频率还是比较高的,而且也是非常有意思,但也是有点理解难度

4.1 IF():如果条件为真,返回一个值;否则返回另一个值

如果2大于1, 则返回True, 否则返回False,不难理解,当条件成立时,返回你指的True值,当条件不成立时, 返回你指定的False值,这个True和False可以是别的类型,如表字段等

SELECT IF(2 > 1, 'True', 'False'); -- 返回 'True'

你也可以使用表中的列或其他表达式作为参数:如下

SELECT 列名, IF(列名> 10, 'Big', 'Small') FROM 表名;

4.2 CASE:在满足条件的情况下返回不同的值。

这个函数有点类似于条件判断,适用的场景是这样的:如果成绩大于90,则返回优秀,如果成绩大于80小于90,则返回一般,如果成绩小于60,则返回不及格。

SELECT 成绩,

        CASE

        WHEN 成绩 > 90 THEN '优秀'

        WHEN 80 < 成绩 < 90 THEN '一般'

        WHEN 60 < 成绩 THEN '不及格'

        ELSE '其它情况'

        END as '可以重命名'

FROM table_name;

在上面的sql中,ELSE是可选的,它是用于处理没有匹配到条件的情况,END它是一个结束符号,是必填,as 是可以对整个判断重命名的

4.3 COALESCE():返回参数列表中的第一个非 NULL 值。

给它一个列表, 如果它发现列表中有null值,那就返回下一个值:

SELECT COALESCE(NULL, 2, 3); -- 返回 2

可能你也会想,这个有啥用呀,来,看一下下面的场景你就觉得有用了

假设有一个表 products 包含商品的库存和默认库存,如下

需求来了,请你检索products表的“库存”字段, 如果发现有null值,请用“默认库存”填充,那你就可以使用以下方法:

SELECT ID, COALESCE('库存', '默认库存') AS '检索后的库存' FROM products;

查询结果如下:哎,是不是有点用了?有点用就行,因为我也懒得举别的例子了

4.4 NULLIF():如果两个参数相等,则返回 NULL;否则返回第一个参数

NULLIF() 函数用于比较两个表达式的值。如果这两个值相等,则返回 NULL,否则返回第一个值

SELECT NULLIF(10, 10); -- 返回 NULL

SELECT NULLIF(10, 20); -- 返回 10

SELECT NULLIF('abc', 'def'); -- 返回 'abc'

SELECT NULLIF(NULL, 5); -- 返回 NULL

可能你又觉得这个函数没用了,来,举例:用于处理除0bug。

SELECT num1 / num2 FROM 表名;

如上sql, num1除以num2, num2是一个存在表里的字段,当你无法保证num2字段是否有可能出现0的情况,那么你可以这样避免代码除0异常

SELECT num1 / NULLIF(num2, 0) FROM 表名;

4.5 IFNULL():如果第一个参数不为 NULL,则返回第一个参数;否则返回第二个参数。

如下, 如果'age'为null, 则返回‘未知’,如果'age'不为null,则返回'age'字段值

SELECT name, IFNULL(age, '未知') FROM 表名;

下一章讲解:约束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好度

你的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值