夜猫子的知识栈 夜猫子的知识栈
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

夜猫子

前端练习生
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Node基础

  • 《MySQL》学习笔记

    • Navicat for MySQL
    • SQL语法
    • 查询操作
    • 数据统计
    • 高级查询
    • 内置函数
      • 数学函数
      • 字符串函数
      • 时间函数
      • 排名函数
        • rank()
        • row_number()
        • dense_rank()
      • 加密函数
        • md5()
        • sha1()
      • 系统函数
      • 其他函数
    • 数据修改
    • 表的操作
    • 列的属性
    • 多表查询
    • 视图
    • 索引
    • 存储程序
    • 游标
    • 事务
    • 安全管理
    • 数据备份
    • 其他内容
  • Midway

  • Nest

  • 其他

  • 服务端
  • 《MySQL》学习笔记
夜猫子
2023-12-01
目录

内置函数

# 内置函数

内置函数一般都是在 select 子句中使用,而不能在 where 等子句中使用。

不同的 DBMS 内置的函数略有不同,下面的函数都适用于 MySQL,但并不一定适用于其他 DBMS(如 SQL Server、Oracle、PostgreSQL 等)。

# 数学函数

函数 说明
abs(列名) 求绝对值
mod(被除数, 除数) 求余
round(列名, n) 四舍五入
truncate(列名, n) 截取小数
sign(列名) 获取符号
pi() 获取圆周率
rand() 获取随机数(0~1)
ceil(列名) 向上取整
floor(列名) 向下取整

**示例:**返回每个产品的名称和四舍五入到两位小数的价格。

SELECT name, ROUND(price) AS rounded_price
FROM fruit;
1
2

# 字符串函数

函数 说明
length(列名) 求字符串长度
trim(列名) 同时去除开头和结尾的空格
reverse(列名) 反转字符串
repeat(列名, n) 将一个字符串重复多次
replace(列名, A, B) 将字符串的一部分替换成另一个字符串
substring(列名, start, length) 截取字符串的一部分
left(列名, n) 截取开头的n个字符
right(列名, n) 截取结尾的n个字符
concat(列1, 列2, …, 列n) 连接两个或多个列
lower(列名) 将字符串的大写字母转换为小写字母
upper(列名) 将字符串的小写字母转换为大写字母
lpad(列名, length, str) 在头部补全字符串长度
rpad(列名, length, str) 在尾部补全字符串长度

**示例:**返回每个产品的名称和名称的长度。

中文算作两个长度

SELECT name, length(name) AS name_length
FROM fruit;
1
2

# 时间函数

函数 说明
curdate() 获取当前的“日期”
curtime() 获取当前的“时间”
now() 获取系统当前的日期和时间
year(列名) 获取指定日期的年份是什么
month(列名) 获取指定日期的月份
monthname(列名) 获取指定日期的月份名称
dayofweek(列名) 获取指定日期对应是星期几(数字)
dayname(列名) 获取指定日期对应是星期几
dayofmonth(列名) 获取指定日期是一个月中的第几天
dayofyear(列名) 指定日期是一年中的第几天
quarter(date) 获取指定日期对应是一年中的第几季

# 排名函数

排名和排序是非常类似的,不过它们之间也是有一定区别:排名会新增一个列,用于表示名次情况。

# rank()

给某一列的排序结果添加名次。不过rank()函数是跳跃性的排名,比如有4名学生,有2个并列第1名,那么名次就是:1、1、3、4。

rank() over(
    partition by 列名
    order by 列名 asc或desc
)
1
2
3
4
  • partition by(可选):用于将结果集分成多个分区,并在每个分区内独立应用排名。
  • order by:用于指定排序的依据,决定排名的顺序。

**示例:**将数据按照类型分类然后按照价格排序

SELECT *, RANK() OVER(PARTITION BY type ORDER BY price DESC) AS rank_price
FROM fruit;
1
2

image-20250207174158229

# row_number()

row_number()函数是用来给某一列的排序结果添加行号。比如有4名学生,有2个并列第1名,那么行号也只有一种情况:1、2、3、4。

row_number() over(
    partition by 列名
    order by 列名 asc或desc
)
1
2
3
4

# dense_rank()

dense_rank()结合了rank()和row_number()的特点,它的排序数字是连续不间断的。比如有4名学生,有2个并列第1名,那么它的结果是:1、2、2、3。

dense_rank() over(
    partition by 列名
    order by 列名 asc或desc
)
1
2
3
4

# 加密函数

在实际开发中,有些数据是非常重要的(比如用户的密码),我们不能“明文”存到数据库里面,而是先对其加密然后再进行保存。

下面是两个常用的加密方式:

# md5()

MySQL中,md5()函数表示使用md5算法来对字符串进行加密。md5()函数是使用非常广泛的一种算法,并且加密是不可逆的。

# sha1()

sha1()函数表示使用sha-1技术来对字符串进行加密。sha1()比md5()更加安全,并且加密是不可逆的。

# 系统函数

在MySQL中,系统函数主要是用于获取当前数据库的信息。常用的系统函数有4个,如下表所示。

函数 说明
database() 获取数据库的名字
version() 获取当前数据库的版本号
user() 获取当前用户名
connection_id() 获取当前连接id

# 其他函数

除了之前介绍的函数之外,MySQL还有一些比较常用的函数,如下表所示。

函数 说明
cast(列名 as type) 类型转换(将一种数据类型转换为另一种数据类型)
if(条件, 值1, 值2) 某一列的值进行条件判断
ifnull(列名, 新值) 条件判断,判断某一列的值是否为NULL

示例:

SELECT name, 
       price, 
       IF(price > 20, 'High', 'Low') AS price_level
FROM fruit;
1
2
3
4

image-20250207180107173

编辑 (opens new window)
上次更新: 2025/3/12 17:54:26
高级查询
数据修改

← 高级查询 数据修改→

最近更新
01
IoC 解决了什么痛点问题?
03-10
02
如何调试 Nest 项目
03-10
03
Provider注入对象
03-10
更多文章>
Copyright © 2019-2025 Study | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式