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

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;

运行结果

http://www.xdnf.cn/news/359.html

相关文章:

  • 【unity实战】Unity动画层级(Animation Layer)的Sync同步和Timing定时参数使用介绍,同步动画层制作角色的受伤状态
  • 数据结构基本概念
  • 如何导出pip下载的paho-mqtt包
  • 1.了解开发行业
  • 解析:深度优先搜索、广度优先搜索和回溯搜索
  • OPC Client第3讲(wxwidgets):wxFormBuilder;基础框架;事件处理
  • JavaScript 所有操作数组的方法
  • Spring Bean 全方位指南:从作用域、生命周期到自动配置详解
  • pip 的包下载之后存放在哪?
  • 【AI提示词】退休规划顾问专家
  • SonarQube 集成教程
  • Python读取Excel表格数据并写成JSON格式文件(精简版)
  • 3.指令与权限
  • 4.6 实现重定向
  • Python基础知识语法归纳总结(数据类型-1)
  • 三格电子——CAN 转光纤(点对点)布线常见问题
  • Function Calling的时序图(含示例)
  • 2025年第十六届蓝桥杯Python程序设计赛道B组
  • 启动vite项目报Unexpected “\x88“ in JSON
  • Vue 开发实战:从入门到精通的经验之谈
  • Seed-Thinking-v1.5:推理模型新标杆诞生
  • 实用工具-screenrec介绍(截图工具)
  • 【AI图像创作变现】01文生图原理与提示词结构
  • 如何查看自己的主机地址
  • vue3中ref创建的变量使用`.value`(可以使用volar插件自动添加`.value)
  • 4月18日复盘
  • 1.Three.js 场景(Scene)详解
  • Ext系列⽂件系统
  • Attention 机制核心 - Transformer 的基石
  • CVE-2023-46604漏洞复现与深度分析