MySQL基础2-函数

本文详细介绍了MySQL中的函数,包括字符串、数值、日期和流程函数,提供示例展示了如何在SQL查询中使用这些函数,如拼接字符串、转换大小写、日期计算等。
摘要由CSDN通过智能技术生成

一. 函数概述

函数是指一段可以被另一段程序调用的程序或代码

二. 字符串函数

MySQL中内置了许多字符串函数,常用的如下:

函数功能
CONCAT(S1, S2, …Sn)字符串拼接,将S1, S2, …Sn拼接成一个字符串
LOWER(str)将字符串str全部转为小写
UPPER(str)将字符串str全部转为大写
LPAD(str, n, pad)左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
RPAD(str, n, pad)右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
TRIM(str)去掉字符串头部和尾部的空格
SUBSTRING(str, start, len)返回字符串str的start位置起的长度为len的字符串

字符串函数的使用:

SELECT 函数(参数);

-- Example

-- concat():
select concat('Hello', 'MySQL');

-- lower():
select lower('HELLO');

-- upper():
select upper('hello');

-- lpad():
select lpad('1', 5, '-');

-- rpad():
select rpad('2', 3, '*');

-- trim():
select trim('   Hello, MySQL        ');

-- substring():
select substring('Hello, MySQL', 2, 4);

三. 数值函数

常见的数值函数如下:

函数功能
CEIL(x)向上取整
FLOOR(x)向下取整
MOD(x,y)返回x/y的模
RAND()返回0-1内的随机数
ROUND(x,y)求参数x的四舍五入的值,保留y位小数
-- Example

-- ceil(x):
select ceil(1.5);

-- floor(x):
select floor(1.2);

-- mod(x,y):
select mod(3,4);

-- rand:
select rand();

-- round(x,y):
select round(3.141592653, 3);

案例:使用函数生成6位数的验证码

-- 1.生成随机数
select rand() * 1000000;

-- 2.取整,去掉小数位
select round(rand() * 1000000, 0);		# 若是生成的随机数如0.001....之类的数就无法保证生成的随机数是6位

-- 3.使用左填充OR右填充
select lpad(round(rand() * 1000000, 0), 6, round(rand() * 1000000, 0));

三. 日期函数

常见的日期函数如下:

函数功能
CURDATE()返回当前日期
CURTIME()返回当前时间
NOW()返回当前时间和日期
YEAR(date)获取指定date的年份
MONTH(date)获取指定date的月份
DAY(date)获取指定date 的日期
DATE_ADD(date, INTERVAL expr type)返回一个日期/时间值加上一个时间间隔expr后的时间值
DATEDIFF(date1, date2)返回起始时间date1和结束时间date2之间的天数
-- Example

-- curdate():
select curdate();

-- curtime():
select curtime();

-- now():
select now();

-- year(date):
# 获取当前时间的年份
select year(now());
# 获取指定时间的年份
select year('2020-05-20 05:20:20');
# 使用年月日亦可
select year('2020-05-20');

-- month(date):
select month(now());

-- day(date):
select day(now());

-- date_add(date, interval expr type):
# 以下使用当前时间做演示
# 获取70天之后的date
select date_add(now(), interval 70 day);
# 获取3个月前的date
select date_add(now(), interval -3 month);
# 获取20年后的date
select date_add(now(), interval 20 year);

-- datediff(date1, date2):
# 使用方法:date1-date2,返回之间的天数
# 求两年前的今天和现在的间隔天数
select datediff(now(), now() - interval 2 year);
# 求8个月后和今天的间隔天数
select datediff(now() + interval 8 month, now());

四. 流程函数

流程函数也是常用的函数之一,可在SQL语句中实现条件筛选,以此提高语句的效率,流程函数中常用函数如下:

函数功能
IF(value, t, f)如果value为true,返回t,否则返回f
IFNULL(value1, value2)如果value1不为空,返回value1,否则返回value2
CASE WHEN [val1] THEN [res1] … ELSE [default] END如果val1为true,返回res1,… 否则返回default默认值
CASE [expr] WHEN [val1] THEN [res1] … ELSE [default] END如果expr的值等于val1,返回res1,… 否则返回default默认值
-- Example

-- if():
select if(0, 1, 2);		# 返回2
select if(1, 3, 2);		# 返回3

-- ifnull():
select ifnull('', 8);	# 返回空字符串(空字符串≠null)
select ifnull(null, 10);	# 返回10;

案例演示1:

查询emp表中员工地址,若为北京/上海,则展示’一线城市’,否则展示’二线城市’,emp表的创建可参考本专栏中MySQL基础1

select
    name,
    case workAddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end as '工作地址' 
from emp;

select * from scores;

案例演示2:
统计scores中各个同学的成绩(scores表的创建可参考本专栏中MySQL基础1),展示规则如下:

>= 85,展示优秀;>= 60, 展示及格;否则,展示不及格

select
    id '学号',
    name '姓名',
    case when Chinese >= 85 then '优秀' when Chinese >= 60 then '及格' else '不及格' end '语文',
    case when Math >= 85 then '优秀' when Math >= 60 then '及格' else '不及格' end '数学',
    case when English >= 85 then '优秀' when English >= 60 then '及格' else '不及格' end '英语',
    age '年龄',
    gender '性别'
from scores;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

离歌慢饮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值