当前位置: 首页 > news >正文

MySQL内置函数:字符串函数,数值函数,日期函数,流程控制函数

目录

字符串函数

CONCAT(str_1,str_2,...str_n)-拼接-例子

LOWER(str)-全转换为小写-例子

UPPER(str)-全转换为大写-例子

LPAD(str, len, str_2)-左填充-例子

RPAD(str, len, str_2)-右填充-例子

TRIM(str)-去除前后空格-例子

SUBSTRING(str, start, len)-字符串切片-例子

案例

数值函数

CEIL(x)-向上取整-例子

FlOOR(x)-向下取整-例子

MOD(x, y)-取模-例子

RAND()-生成随机数(0~1)-例子

ROUND(x, y)-四舍五入保留y位小数-例子

案例

日期函数

CURDATE()-返回当前日期-例子

CURTIME()-返回当前时间-例子

NOW()-返回当前日期和时间-例子

YEAR(date)-返回指定date的年份-例子

MONTH(date)-返回指定date的月份-例子

DAY(date)-返回指定date的day-例子

DATE_ADD(date, INTERVAL expr type)-指定日期加上时间间隔-例子

DATEDIFF(date1, date2)-间隔天数-例子

案例

流程控制函数

IF(value, t, f)-例子

IFNULL(value1, value2)-例子

CASE WHEN [val1] THEN [res1]...ELSE [default] END-例子

CASE [expr] WHEN [val1] THEN [res1]...ELSE [default] END-例子

案例


函数:指一段可以直接被另一段程序调用的程序或代码。

字符串函数

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

函数

功能

CONCAT(str_1,str_2,...str_n)

字符串拼接,将str_1,str_2,...str_n拼接成一个字符串

LOWER(str)

将字符串str全部转换为小写

UPPER(str)

将字符串str全部转换为大写

LPAD(str, len, str_2)

左填充,用字符串str_2在str的左边填充至长度为len

若str的长度大于len,则截断str至长度len返回

RPAD(str, len, str_2)

右填充,用字符串str_2在str的右边填充至长度为len

若str的长度大于len,则截断str至长度len返回

TRIM(str)

去除字符串头部和尾部的空格

SUBSTRING(str, start, len)

返回字符串str从start位置(start从1开始)起到长度为len的字符串切片

示例如下:

CONCAT(str_1,str_2,...str_n)-拼接-例子

将字符串“Hello”和字符串“World”拼接起来

代码:

SELECT CONCAT('Hello', 'World') AS '拼接结果';

运行结果

LOWER(str)-全转换为小写-例子

将字符串“Hello”全部转换为小写

代码:

SELECT LOWER('Hello') AS '转换结果';

运行结果

UPPER(str)-全转换为大写-例子

将字符串“Hello”全部转换为大写

代码:

SELECT UPPER('Hello') AS '转换结果';

运行结果

LPAD(str, len, str_2)-左填充-例子

左填充

  1. 用字符“-”在“Hello”的左边填充至长度为7;
  2. 若“Hello”的长度大于3,则截断“Hello”至长度3返回

代码:

-- 1.用字符“-”“Hello”的左边填充至长度为7

-- 2.“Hello”的长度大于3,则截断“Hello”至长度3返回

SELECT LPAD('Hello', 7, '-') '结果1', LPAD('Hello', 3, '-') '结果2';

运行结果

RPAD(str, len, str_2)-右填充-例子

右填充

  1. 用字符串“-”在“Hello”的右边填充至长度为8
  2. 若“Hello”的长度大于2,则截断“Hello”至长度2返回

代码:

# 1.用字符串“-”“Hello”的右边填充至长度为8

# 2.“Hello”的长度大于2,则截断“Hello”至长度2返回

SELECT RPAD('Hello', 8, '-') AS '结果1', RPAD('Hello', 2, '-') AS '结果2';

运行结果

TRIM(str)-去除前后空格-例子

去除字符串“  Hello World! ”的前后空格

代码:

-- 去除字符串“  Hello World! ”的前后空格

SELECT TRIM('  Hello World! ') '去除空格后';

运行结果

SUBSTRING(str, start, len)-字符串切片-例子

返回字符串“Hello World”从2位置起到长度为4的字符串

代码:

# 返回字符串“Hello World”2位置起到长度为8的字符串

SELECT SUBSTRING('Hello World', 2, 8) '字符串切片为';

运行结果

案例

使用test数据库中的emp表,表中数据如下:

现在的需求是:统一员工的工号(work_no)为5位数,如果不满5位数就在前面补0

代码:

# 左填充,不足5位,在工号前补0

UPDATE emp SET work_no = LPAD(work_no, 5, '0');

运行结果

数值函数

常见的数值函数

函数

功能

CEIL(x)

向上取整

FlOOR(x)

向下取整

MOD(x, y)

返回x/y的模,即求模运算

RAND()

返回0~1内的随机数

ROUND(x, y)

求参数x四舍五入的值,保留y位小数

示例如下:

CEIL(x)-向上取整-例子

数值1.23向上取整

代码:

# 数值1.23向上取整

SELECT CEIL(1.23) AS '结果';

运行结果

FlOOR(x)-向下取整-例子

数值1.983向下取整

代码:

-- 数值1.983向下取整

SELECT FLOOR(1.983) '结果';

运行结果

MOD(x, y)-取模-例子

返回9/2的模

代码:

-- 返回9/2的模

SELECT MOD(9, 2) AS '结果';

运算结果

RAND()-生成随机数(0~1)-例子

随机生成一个0~1之间的数值

代码:

SELECT RAND() AS '结果';

运算结果

ROUND(x, y)-四舍五入保留y位小数-例子

求数值8.50646四舍五入的值,保留4位小数

代码:

SELECT ROUND(8.50646, 4) AS '结果';

运行结果

案例

需求:生成一个六位数的随机验证码

代码:

# 生成一个六位数的随机验证码

SELECT RPAD(ROUND(RAND() * 1000000, 0), 6, '0') AS '随机验证码';

运行结果

日期函数

常见日期函数如下:

函数

功能

CURDATE()

返回当前日期(CURDATE实际上是current date)

CURTIME()

返回当前时间

NOW()

返回当前日期和时间

YEAR(date)

返回指定date的年份

MONTH(date)

返回指定date的月份

DAY(date)

返回指定date的day

DATE_ADD(date, INTERVAL expr type)

返回一个日期/时间值加上一个时间间隔expr后的时间值

  1. INTERVAL固定
  2. expr是指定时间间隔
  3. type是时间间隔的单位(YEAR或MONTH或DAY)

DATEDIFF(date1, date2)

返回起始时间date1和结束时间date2之间的天数。间隔天数=date1-date2

示例如下:

CURDATE()-返回当前日期-例子

返回当前日期

代码:

SELECT CURDATE() '当前日期';

运行结果

CURTIME()-返回当前时间-例子

返回当前时间

代码:

SELECT CURTIME() '当前时间';

运行结果

NOW()-返回当前日期和时间-例子

返回当前日期和时间

代码:

SELECT NOW() '当前日期和时间';

运行结果

YEAR(date)-返回指定date的年份-例子

返回“2022-03-22”的年份

代码:

SELECT YEAR('2022-03-22') '年份';

运行结果

MONTH(date)-返回指定date的月份-例子

返回“2022-03-22”的月份

代码:

SELECT MONTH('2022-03-22') '月份';

运行结果

DAY(date)-返回指定date的day-例子

返回“2022-03-22”的day

代码:

SELECT DAY('2022-03-22') 'day';

运行结果

DATE_ADD(date, INTERVAL expr type)-指定日期加上时间间隔-例子

返回“2022-03-22”加上70天的日期

SELECT DATE_ADD('2022-03-22', INTERVAL 70 DAY) AS '结果';

DATEDIFF(date1, date2)-间隔天数-例子

返回“2024-03-14”和“2022-03-22”的间隔天数

代码:

-- 返回“2024-03-14”“2022-03-22”的间隔天数

SELECT DATEDIFF('2024-03-14', '2022-03-22') AS '间隔天数';

运行结果

案例

使用test数据库中的emp表,表中数据如下:

现在的需求是:查询所有员工的入职天数(入职日期为entry_date),并根据入职天数倒序排序。

代码:

# 查询所有员工的入职天数,并根据入职天数倒序排序

SELECT DATEDIFF(NOW(), entry_date) AS entry_days, emp_name FROM emp ORDER BY entry_days DESC;

注意:entry_days是入职天数

运行结果

流程控制函数

流程控制函数:可以在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默认值

示例如下:

IF(value, t, f)-例子

调用IF流程控制函数,设第一个参数为TRUE或FALSE,第二个参数为“ok”,第三个参数为“error”

代码:

SELECT IF(TRUE, 'ok', 'error') '结果1', IF(FALSE, 'ok', 'error') '结果2';

运行结果

IFNULL(value1, value2)-例子

调用IFNULL流程控制函数,设第一个参数为“你好”或NULL,第二个参数为“世界”

SELECT IFNULL('你好', '世界') AS '结果1', IFNULL(NULL, '世界') AS '结果2';

运行结果

CASE WHEN [val1] THEN [res1]...ELSE [default] END-例子

使用test数据库中的emp表,emp表数据如下:

需求:查询emp表的员工姓名和工作地址是几线城市(上海或杭州是一线,其他的是二线城市)

代码:

-- 方式1:查询emp表的员工姓名和工作地址是几线城市(上海或杭州是一线,其他的是二线城市)

SELECT emp_name,

CASE WHEN work_address IN('上海', '杭州') THEN CONCAT('一线城市_', work_address)

ELSE CONCAT('二线城市_', work_address) END AS '工作地址' FROM emp;

-- 方式2:查询emp表的员工姓名和工作地址是几线城市(上海或杭州是一线,其他的是二线城市)

-- 使用IF流程控制函数

SELECT emp_name,

IF(work_address IN('上海', '杭州'), CONCAT('一线城市_', work_address), CONCAT('二线城市_', work_address)) '工作地址'

FROM emp;

运行结果

CASE [expr] WHEN [val1] THEN [res1]...ELSE [default] END-例子

使用test数据库中的emp表,emp表数据如下:

需求:查询emp表的员工姓名和工作地址是几线城市(上海或杭州是一线,其他的是二线城市)

代码:

-- :查询emp表的员工姓名和工作地址是几线城市(上海或杭州是一线,其他的是二线城市)

SELECT emp_name,

CASE work_address WHEN '上海' THEN CONCAT('一线城市_', work_address) WHEN '杭州' THEN CONCAT('一线城市_', work_address)

ELSE CONCAT('二线城市_', work_address) END AS '工作地址' FROM emp;

运行结果

案例

使用test数据库的orders订单表,数据如下:

需求:

统计每一笔订单的销售额,展示规则如下:

>= 2000,展示“level3”

>=1000,展示“level2”

否则,展示“level1”

代码:

SELECT order_id AS '订单id',

CASE WHEN sales >= 2000 THEN 'level3'

WHEN sales >= 1000 THEN 'level2'

ELSE 'level1' END '销售等级'

FROM orders;

运行结果

相关文章:

  • 基于VS Code 为核心平台的python语言智能体开发平台搭建
  • Oracle 19c部署之RMP一键安装初始化(五)
  • 微前端框架QianKun
  • 开源AI守护每一杯------奶茶咖啡店视频安全系统的未来之力
  • 20250418 一个正定矩阵的引理
  • 算法-链表
  • Docker Image export and load and tag
  • Xcode16 调整 Provisioning Profiles 目录导致证书查不到
  • React 函数组件和类组件的区别
  • dify本地部署,docker-plugin_daemon-1启动不了,一直报错
  • OpenSPG/KAG V0.7发布,多方面优化提升,事实推理效果领先且构建成本降至11%
  • 科技天眼守望农田:珈和卫星遥感监测赋能智慧农业,护航粮食安全新未来
  • 无刷电机槽数相同、转子极数不同的核心区别
  • Java ThreadLocal内存泄漏分析
  • 健康养生:开启活力生活新篇章
  • 前端如何构建跨平台可复用的业务逻辑层(Web、App、小程序)
  • 守护进程编程以及ssh反向代理
  • C语言==》字符串断行
  • 每日文献(十四)——Part one
  • 前端:uniapp框架中<scroll-view>如何控制元素进行局部滚动
  • 为什么要研制大型水陆两栖飞机?AG600总设计师给出答案
  • 北京理工大学解除宫某聘用关系,该教师被指涉嫌骚扰猥亵学生
  • 加快从数量增长向品质跃升转变,促进生态空间与城市功能有机共生!龚正调研公园城市建设工作
  • 杭州:调整个人购买家庭住房享受契税优惠住房套数查询规则
  • 雅生活服务:向雅居乐收购两家环保公司,总价约6060万元
  • 上海加大对中小微企业信贷支持力度,奖补资金规模提升到5亿元