MySQL SELECT 查询(三):查询常用函数大全
MySQL SELECT 查询(三):查询常用函数大全
1. 单行函数
单行函数是 SQL 中一类重要的函数,它们可以对单行数据进行处理,并返回单个结果。单行函数可以嵌套使用,并提供灵活的数据处理能力。
1.1 定义
- 只对单行数据进行操作,每行返回一个结果。
- 参数可以是列名、表达式或常量。
- 可以嵌套使用,形成更复杂的表达式。
1.2 数值函数
数值函数用于处理数值数据,提供各种数学运算功能。
函数 | 用法 | 说明 |
---|---|---|
ABS() | 返回指定数值的绝对值 | 例如:ABS(-5) 返回 5 |
SIG() | 返回指定数值的符号值 | 例如:SIG(-5) 返回 -1 |
PI() | 返回圆周率 π 的值 | 例如:PI() 返回 3.141592653589793 |
CEIL() /CEILING() | 返回大于等于指定数值的最小整数 | 例如:CEIL(3.2) 返回 4 |
FLOOR() | 返回小于等于指定数值的最大整数 | 例如:FLOOR(3.2) 返回 3 |
MOD() | 返回两个数值相除的余数 | 例如:MOD(10, 3) 返回 1 |
RAND() | 返回一个 0 到 1 之间的随机浮点数 | 例如:RAND() 返回一个介于 0 到 1 之间的随机浮点数 |
RAND(因子) | 根据指定的因子生成随机数 | 例如:RAND(2) 返回一个介于 0 到 0.5 之间的随机浮点数 |
ROUND() | 将数值四舍五入到指定的小数位数 | 例如:ROUND(3.14159, 2) 返回 3.14 |
ROUND(数值, 保留小数位) | 将数值四舍五入到指定的小数位数 | 例如:ROUND(3.14159, 2) 返回 3.14 |
TRUNCATE(数值, 截断位) | 将数值截断到指定的小数位数 | 例如:TRUNCATE(3.14159, 2) 返回 3.14 |
1.3 三角函数
三角函数用于处理角度和弧度,并返回相应的三角函数值。
函数 | 用法 | 说明 |
---|---|---|
RADIANS() | 将角度转换为弧度 | 例如:RADIANS(45) 返回 0.7853981633974483 |
DEGREES() | 将弧度转换为角度 | 例如:DEGREES(0.7853981633974483) 返回 45 |
POW(x, y) | 返回 x 的 y 次幂 | 例如:POW(2, 3) 返回 8 |
EXP(x) | 返回 e 的 x 次幂 | 例如:EXP(1) 返回 2.718281828459045 |
1.4 进制转换函数
进制转换函数用于将数值从一种进制转换为另一种进制。
函数 | 用法 | 说明 |
---|---|---|
BIN(x) | 将十进制数值转换为二进制字符串 | 例如:BIN(10) 返回 “1010” |
HEX(x) | 将十进制数值转换为十六进制字符串 | 例如:HEX(10) 返回 “A” |
OCT(x) | 将十进制数值转换为八进制字符串 | 例如:OCT(10) 返回 “12” |
CONV(x, f1, f2) | 将 x 从 f1 进制转换为 f2 进制 | 例如:CONV(10, 10, 2) 返回 “1010” |
1.5 字符串函数
字符串函数在 SQL 中用于处理文本数据,允许用户进行多种字符串操作。
函数 | 用法 | 说明 |
---|---|---|
ASCII(char) | 返回指定字符的 ASCII 码 | 例如:ASCII('A') 返回 65。 |
CHAR_LENGTH(string) | 返回字符串的字符数 | 例如:CHAR_LENGTH('Hello') 返回 5。 |
LENGTH(string) | 返回字符串的字节数 | 例如:LENGTH('Hello') 返回 5;若为多字节字符,则可能大于此值。 |
CONCAT(s1, s2, ...) | 连接多个字符串 | 例如:CONCAT('Hello', ' ', 'World') 返回 ‘Hello World’。 |
CONCAT_WS(separator, s1, s2, ...) | 用指定的分隔符连接多个字符串,忽略 NULL 值 | 例如:CONCAT_WS(',', 'Apple', 'Banana', NULL) 返回 ‘Apple,Banana’。 |
INSERT(str, idx, len, replacestr) | 将 replacestr 插入到 str 中,从 idx 开始的 len 个字符位置替换 | 例如:INSERT('Hello', 2, 2, 'XX') 返回 ‘HXXlo’。 |
REPLACE(str, old_str, new_str) | 将 str 中的所有 old_str 替换为 new_str | 例如:REPLACE('Hello World', 'World', 'SQL') 返回 ‘Hello SQL’。 |
UPPER(str) | 将字符串转换为大写 | 例如:UPPER('hello') 返回 ‘HELLO’。 |
LOWER(str) | 将字符串转换为小写 | 例如:LOWER('HELLO') 返回 ‘hello’。 |
LEFT(str, len) | 返回字符串左侧的 len 个字符 | 例如:LEFT('Hello', 3) 返回 ‘Hel’。 |
RIGHT(str, len) | 返回字符串右侧的 len 个字符 | 例如:RIGHT('Hello', 3) 返回 ‘llo’。 |
LPAD(str, len, padstr) | 如果字符串长度不足 len ,则在左侧用 padstr 填充 | 例如:LPAD('SQL', 10, '-') 返回 ‘-------SQL’。 |
RPAD(str, len, padstr) | 如果字符串长度不足 len ,则在右侧用 padstr 填充 | 例如:RPAD('SQL', 10, '-') 返回 ‘SQL-------’。 |
TRIM(str) | 去除字符串首尾的空格 | 例如:TRIM(' SQL ') 返回 ‘SQL’。 |
LTRIM(str) | 去除字符串左侧的空格 | 例如:LTRIM(' SQL') 返回 ‘SQL’。 |
RTRIM(str) | 去除字符串右侧的空格 | 例如:RTRIM('SQL ') 返回 ‘SQL’。 |
TRIM(s1 FROM s2) | 去除 s2 首尾的 s1 字符 | 例如:TRIM('!#' FROM '!#Hello#!!#') 返回 ‘Hello’。 |
TRIM(LEADING s1 FROM s2) | 去除 s2 开头处的 s1 字符 | 例如:TRIM(LEADING '!' FROM '!!!Hello') 返回 ‘Hello’。 |
TRIM(TRAILING s1 FROM s2) | 去除 s2 结尾处的 s1 字符 | 例如:TRIM(TRAILING '#' FROM 'Hello###') 返回 ‘Hello’。 |
REPEAT(str, n) | 重复 str n 次 | 例如:REPEAT('A', 3) 返回 ‘AAA’。 |
SPACE(n) | 返回 n 个空格字符 | 例如:SPACE(5) 返回 ’ '(5个空格)。 |
STRCMP(s1, s2) | 比较两个字符串的大小,返回值:<0(s1 < s2),0(s1 = s2),>0(s1 > s2) | 例如:STRCMP('abc', 'xyz') 返回 -1。 |
SUBSTR(str, index, len) | 返回 str 中从 index 开始的 len 个字符 | 例如:SUBSTR('Hello', 2, 3) 返回 ‘ell’。 |
LOCATE(substr, str) | 返回 substr 在 str 中首次出现的位置,未找到返回 -1 | 例如:LOCATE('o', 'Hello World') 返回 5。 |
ELT(i, s1, s2, ...) | 返回列表中第 i 项。i 从 1 开始 | 例如:ELT(2, 'one', 'two', 'three') 返回 ‘two’。 |
FIELD(s, s1, s2, ...) | 返回字符串 s 在字符串列表中首次出现的位置 | 例如:FIELD('b', 'a', 'b', 'c') 返回 2。 |
FIND_IN_SET(s1, s2) | 返回字符串 s1 在以逗号为分隔符的字符串 s2 中的位置 | 例如:FIND_IN_SET('b', 'a,b,c') 返回 2。 |
REVERSE(s) | 反转字符串 | 例如:REVERSE('Hello') 返回 ‘olleH’。 |
NULLIF(s1, s2) | 若 s1 与 s2 相等则返回 NULL,否者返回 s1 | 例如:NULLIF(1, 1) 返回 NULL,NULLIF(1, 2) 返回 1。 |
1.6 日期和时间函数
获取日期与时间的函数
-
当前日期和时间
-
CURDATE()
,CURRENT_DATE()
: 返回当前日期,格式为YYYY-MM-DD
。 -
NOW()
,SYSDATE()
: 返回当前日期和时间,格式为YYYY-MM-DD HH:MM:SS
。 -
CURTIME()
: 返回当前时间,格式为HH:MM:SS
。SELECT CURDATE(), CURRENT_DATE(), NOW(), SYSDATE(), CURTIME();
-
-
UTC 日期和时间
-
UTC_DATE
: 返回当前 UTC 日期,格式为YYYY-MM-DD
。 -
UTC_TIME
: 返回当前 UTC 时间,格式为HH:MM:SS
。SELECT UTC_DATE(), UTC_TIME();
-
日期与时间戳的转换函数
-
日期转换为时间戳
UNIX_TIMESTAMP(date)
: 返回日期的时间戳(自1970-01-01 00:00:00 UTC
开始的秒数)。UNIX_TIMESTAMP()
: 返回当前日期的时间戳。
-
时间戳转换为日期
-
FROM_UNIXTIME(timestamp)
: 返回时间戳对应的日期和时间。SELECT UNIX_TIMESTAMP('2023-09-30'), FROM_UNIXTIME(1664355200);
-
获取月份、星期、星期数、天数
-
日期组成部分
-
YEAR(date)
: 返回日期的年份。 -
MONTH(date)
: 返回日期的月份。 -
DAY(date)
: 返回日期的天数。 -
HOUR(date)
: 返回日期的小时。 -
MINUTE(date)
: 返回日期的分钟。 -
SECOND(date)
: 返回日期的秒。 -
MONTHNAME(date)
: 返回日期的月份名称。 -
DAYNAME(date)
: 返回日期的星期名称。 -
WEEKDAY(date)
: 返回日期的星期索引,周一是 0。SELECT YEAR(NOW()), MONTH(NOW()), DAY(NOW()), HOUR(NOW()), MINUTE(NOW()), SECOND(NOW());
-
日期的操作函数
-
日期加减
-
DATE_ADD(datetime, INTERVAL expr type)
: 在日期上增加一个指定的时间间隔。 -
DATE_SUB(datetime, INTERVAL expr type)
: 在日期上减少一个指定的时间间隔。SELECT DATE_ADD(NOW(), INTERVAL 1 DAY), DATE_SUB(NOW(), INTERVAL 1 DAY);
-
日期的格式化
-
日期格式化
-
DATE_FORMAT(date, format)
: 返回按照指定格式格式化后的日期。SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); -- 格式化日期时间为年- 月-日 时:分:秒
-
格式化符号:
%Y
: 四位数字的年份%y
: 两位数字的年份%m
: 月份(01-12)%d
: 月份中的日(01-31)%H
: 24小时制的小时(00-23)%i
: 分钟(00-59)%s
: 秒(00-59)
-
2. 聚合函数
聚合函数在 SQL 中用于对一组值执行计算,并返回单个结果。这些函数在执行数据分析、统计计算等任务时非常有用。
2.1 常用的聚合函数
函数 | 作用 |
---|---|
AVG() | 计算指定列的平均值 |
SUM() | 计算指定列的总和 |
MAX() | 返回指定列中的最大值 |
MIN() | 返回指定列中的最小值 |
COUNT() | 计算指定列中非 NULL 值的数量 |
2.2 COUNT()
函数详解
COUNT()
函数用于计算指定列中非 NULL 值的数量,它是统计记录总数的首选函数。
-
计算字段出现次数
SELECT COUNT(1), COUNT(employee_id), COUNT(*), COUNT(2) FROM employees e;
- 注意事项:
- 使用
COUNT(1)
或COUNT(*)
可以计算表中的记录总数,忽略 NULL 值。 - 使用
COUNT(具体字段)
会计算该字段非 NULL 值的数量,可能会受到 NULL 值的影响。 - 在新版本 MySQL 中,
COUNT(1)
和COUNT(*)
的效率高于COUNT(具体字段)
。
- 使用
- 注意事项:
2.3 AVG()
与 SUM()
的关系
AVG()
函数计算平均值,等于 SUM()
函数除以 COUNT()
函数的结果。
SELECT AVG(salary), SUM(salary) / COUNT(salary),AVG(commission_pct), SUM(commission_pct) / COUNT(commission_pct),SUM(commission_pct) / 107
FROM employees e;
2.4 GROUP BY
子句
GROUP BY
子句用于对结果集进行分组,并与聚合函数结合使用。
-
分组查询示例
SELECT department_id, AVG(salary) FROM employees e GROUP BY department_id;
-
连续分组
SELECT department_id, job_id, AVG(salary) FROM employees e GROUP BY department_id, job_id;
-
注意事项:
- 在
GROUP BY
子句中查询的字段必须在GROUP BY
子句中列出。 GROUP BY
子句通常位于WHERE
子句之后,ORDER BY
子句之前。
- 在
2.5 WITH ROLLUP
选项
WITH ROLLUP
选项可以在 GROUP BY
子句中使用,它会在分组的基础上添加一行,显示每个分组的总计和所有行的总计。
SELECT department_id, AVG(salary)
FROM employees e
GROUP BY department_id WITH ROLLUP;
- 注意事项:
- 使用
WITH ROLLUP
后不能使用ORDER BY
子句,因为它会与ROLLUP
产生的总计行产生冲突。
- 使用
2.6 HAVING
子句
HAVING
子句用于在 GROUP BY
分组之后对结果集进行过滤。
-
使用场景:
- 当过滤条件包含聚合函数时,必须使用
HAVING
子句。 - 通常与
GROUP BY
子句一起使用。
- 当过滤条件包含聚合函数时,必须使用
-
注意事项:
HAVING
子句的位置在GROUP BY
子句之后。- 由于
HAVING
子句是在分组之后应用过滤,因此它的效率通常低于WHERE
子句。 - 在没有聚合函数的情况下,通常使用
WHERE
子句而不是HAVING
子句。
相关文章:

MySQL SELECT 查询(三):查询常用函数大全
MySQL SELECT 查询(三):查询常用函数大全 1. 单行函数 单行函数是 SQL 中一类重要的函数,它们可以对单行数据进行处理,并返回单个结果。单行函数可以嵌套使用,并提供灵活的数据处理能力。 1.1 定义 只对单…...

axios 的 get 请求传参数
在使用 Axios 发起 GET 请求时,参数通常是通过 URL 的查询字符串来传递的。Axios 提供了一个简洁的接口来构建这样的请求,并自动将参数附加到 URL 上。 以下是一个使用 Axios 发起 GET 请求并传递参数的示例: const axios require(axios);…...

用C++编写信息管理系统(歌单信息管理)
C语言是面向过程的编程语言,而C是面向对象的编程语言,在书写代码时风格有所不同(也存在很多共性)。 程序说明 本次系统程序使用的是C语言进行编写,主要考虑怎么实现面向对象的问题。 因为本次程序属于小型系统程序&…...

对层级聚类树进行模块分割,定位基因在哪个模块中
拷贝数据到 ImageGP (http://www.ehbio.com/Cloud_Platform/front/#/analysis?pageb%27Ng%3D%3D%27),并设置参数. ID untrt_N61311 untrt_N052611 untrt_N080611 untrt_N061011 trt_N61311 trt_N052611 trt_N080611 trt_N061011 ENSG000…...

机器学习【金融风险与风口评估及其应用】
机器学习【金融风险与风口评估及其应用】 一、机器学习在金融风险评估中的应用1.提升评估准确性2.实现自动化和智能化3.增强风险管理能力4.信用评估5.风险模型6.交易策略7.欺诈检测 二、机器学习在金融风口评估中的应用1.识别市场趋势2.评估创新潜力3.优化投资策略4. 自然语言处…...

【计算机网络 - 基础问题】每日 3 题(三十八)
✍个人博客:https://blog.csdn.net/Newin2020?typeblog 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞…...

深入浅出MongoDB(五)
深入浅出MongoDB(五) 文章目录 深入浅出MongoDB(五)可重试读取可重试写入读关注readConcern支持写关注 可重试读取 可重试读取允许mongodb驱动程序在遇到某些网络或服务器错误时,自动重试某些读取操作一次。只有连接到…...

【conda】创建、激活、删除虚拟环境
前言一、创建虚拟环境二、删除虚拟环境总结 前言 主要是记录一下步骤 一、创建虚拟环境 地址栏输入cmd,唤起命令符栏目,就可以在指定目录下创建虚拟环境了。 这样方便日后在pycharm直接配置虚拟环境。 conda create -n yolo5-lite python3.9 -y简单来说…...

关于int*的*号归属权问题
再根据函数指针定义:int (*int) (int a)。我们发现*和后面的标识符才是一体的 所以int *a,b;的写法更好,说明a是指针类型,b是int类型...

leetcode---素数,最小质因子,最大公约数
1 判断一个数是不是质数(素数) 方法1:依次判断能否被n整除即可,能够整除则不是质数,否则是质数 方法2:假如n是合数,必然存在非1的两个约数p1和p2,其中p1<sqrt(n),p2>sqrt(n)。 方法3&…...

基于stm32的蓝牙模块实验
蓝牙模块定长或不定长发送 头文件 #include "stdio.h" #include "sys.h"#define UART2_RX_BUF_SIZE 128 #define UART2_TX_BUF_SIZE 64UART_HandleTypeDef uart2_handle;uint8_t uart2_rx_buf[UART2_RX_BUF_SIZE]; uint16_t uart2_rx_len 0; void b…...

C语言解决TopK问题
前言: 本文TopK问题是在数据量很大的前提下进行解决,当数据量足够大时,内存中存不下,只能存到文件硬盘中。当存到硬盘中,我们无法用建堆,一个一个pop取出最值的方式解决,因为我们没法在硬盘中去…...

磁盘存储链式结构——B树与B+树
红黑树处理数据都是在内存中,考虑的都是内存中的运算时间复杂度。如果我们要操作的数据集非常大,大到内存已经没办法处理了该怎么办呢? 试想一下,为了要在一个拥有几十万个文件的磁盘中查找一个文本文件,设计的…...

如何批量从sql语句中提取表名
简介 使用的卢易表 的提取表名功能,可以从sql语句中批量提取表名。采用纯文本sql语法分析,无需连接数据库,支持从含非sql语句的文件文件中提取,支持各类数据库sql语法。 特点 快:从成百个文件中提取上千个表名只需1…...

怎么把音频的速度调慢?6个方法调节音频速度
怎么把音频的速度调慢?调慢音频速度不仅可以帮助我们更好地捕捉细节,还能让我们在分析和学习时更加从容。这对于音乐爱好者来说,尤其有助于理解复杂的旋律和和声,使学习过程变得更加高效。而在语言学习中,放慢语速则能…...

K8s-services+pod详解1
一、Service 我们能够利用Deployment创建一组Pod来提供具有高可用性的服务。 虽然每个Pod都会分配一个单独的Pod IP,然而却存在如下两问题: Pod IP 会随着Pod的重建产生变化Pod IP 仅仅是集群内可见的虚拟IP,外部无法访问 这样对于访问这…...

从RNN讲起(RNN、LSTM、GRU、BiGRU)——序列数据处理网络
文章目录 RNN(Recurrent Neural Network,循环神经网络)1. 什么是RNN?2. 经典RNN的结构3. RNN的主要特点4. RNN存在问题——长期依赖(Long-TermDependencies)问题 LSTM(Long Short-Term Memory&a…...

python:假的身份信息生成模块faker
前言 发现一个有趣的python模块(faker),他支持生成多个国家语言下的假身份信息,包含人名、地址、邮箱、公司名、电话号码、甚至是个人简历! 你可以拿它做一些自动化测试,或一些跟假数据有关的填充工作。 代…...

spring task的使用场景
spring task 简介 spring task 是spring自带的任务调度框架按照约定的时间执行某个方法的工具,类似于闹钟 应用场景 cron表达式 周和日两者必定有一个是问号 简单案例...

美畅物联丨剖析 GB/T 28181 与 GB 35114:视频汇聚领域的关键协议
我们在使用畅联云平台进行视频汇聚时,经常会用的GB/T 28181协议,前面我们写了关于GB/T 28181的相关介绍, 详见《畅联云平台|关于GB28181你了解多少?》。 最近也有朋友向我们咨询GB 35114协议与GB/T 28181有什么不同…...

uni-app 开发的应用快速构建成鸿蒙原生应用
uni-app 是一个使用 Vue.js 开发所有前端应用的框架,它支持编译到 iOS、Android、小程序等多个平台。对于 HarmonyOS(鸿蒙系统),uni-app 提供了特定的支持,允许开发者构建鸿蒙原生应用。 一、uni-app 对 HarmonyOS 的支…...

代码随想录算法训练营| 669. 修剪二叉搜索树 、 108.将有序数组转换为二叉搜索树 、 538.把二叉搜索树转换为累加树
669. 修剪二叉搜索树 题目 参考文章 思路:这题其实就是删除不符合上下边界的节点。注意:这里删除不符合上下边界节点时,这个不符合上下边界的节点的左或右子树可能存在符合上下边界的节点,所i有每次比较完之后,要继…...

Django模型实现外键自关联
Django模型实现外键自关联 1、场景 省市区、评论 2、模型models.py from django.db import models 资讯评论:资讯,用户,是否取消,时间class CommentInfomation(models.Model):info = models...

Android ViewModel
一问:ViewModel如何保证应用配置变化后能够自动继续存在,其原理是什么,ViewModel的生命周期和谁绑定的? ViewModel 的确能够在应用配置发生变化(例如屏幕旋转)后继续存在,这得益于 Android 系统的 ViewMod…...

优先算法1--双指针
“一念既出,万山无阻。”加油陌生人! 目录 1.双指针--移动零 2.双指针-复写零 ok,首先在学习之前,为了方便大家后面的学习,我们这里需要补充一个知识点,我这里所谓的指针,不是之前学习的带有…...

利用弹性盒子完成移动端布局(第二次实验作业)
需要实现的效果如下: 下面是首先是这个项目的框架: 然后是html页面的代码: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"wid…...

C# 字符串(string)三个不同的处理方法:IsNullOrEmpty、IsInterned 、IsNullOrWhiteSpace
在C#中,string.IsNullOrEmpty、string.IsInterned 和 string.IsNullOrWhiteSpace 是三个不同的字符串处理方法,它们各自有不同的用途: 1.string.IsNullOrEmpty: 这个方法用来检查字符串是否为null或者空字符串("…...

读书笔记 - 虚拟化技术 - 0 QEMU/KVM概述与历史
《QEMU/KVM源码解析与应用》 - 王强 概述 虚拟化简介 虚拟化思想 David Wheeler:计算机科学中任何问题都可以通过增加一个中间层来解决。 虚拟化思想存在与计算机科学的各个领域。 主要思想:通过分层将底层的复杂,难用的资源虚拟抽象为简…...

常见的负载均衡
1.常见的负载均衡服务 负载均衡服务是分布式系统中用于分配网络流量和请求的关键组件,它可以帮助提高应用程序的可用性、可扩展性和响应速度。以下是一些常用的负载均衡服务: Nginx:一个高性能的Web服务器和反向代理,广泛用于实现…...

利用sessionStorage收集用户访问信息,然后传递给后端
这里只是简单的收集用户的停留时间、页面加载时间、当前页面URL及来源页面,以做示例 <html><head><meta http-equiv"content-type" content"text/html; charsetUTF-8"/><title>测试sessionStorage存储用户访问信息<…...