一篇文章带你玩懂数据库的基础函数

数据库的函数

  • 单行函数
    • 1.数据函数
    • 2.字符串函数
    • 3.时间函数
    • 4.流程函数
  • 多行函数
    • 聚合函数

阅读指南:
本文章讲述了对于数据库的单行和多行函数,如果读者感兴趣,后续我们会更新高级的操作在我们的对于数据库教程的合集中,大家可以来很我们一起学习讨论
合集链接:
数据库详细基础教程

单行函数

含数据函数,字符串函数,时间函数,流程函数

1.数据函数

函数名用法
ABS(x)返回x的绝对值
SIGN(X)返回x的符号。正数返回1,负数返回-1,0返回0
PI()返回圆周率的值
CEIL(X) , CEILING(X)返回大于或等于某个值的最小整数(取大函数)
FLOOR(x)返回小于或等于某个值的最大正数(取小函数)
LEAST(e1,e2,e3……)返回列表中的最小值
GREATEST(e1,e2,e3……)返回列表中的最大值
MOD(x, y)返回X除以Y后的余数
RAND()返回0~1的随机数
RAND(x)返回0~1的随机数,其中x用作种子值,相同的x会产生相同的随机数
ROUND(X)返回一个对x进行四舍五入的值
ROUND(x, y)返回应该对x进行四舍五入的值,同时保留到小数点后y位
TRUNCATE(x, y)返回数字x阶段为y位小数的结果
SQRT(x)返回x的平方根,当x的值为负数时,返回NULL

示例:

SELECT ABS(-5), CEIL(2.3), CEIL(-2.3), FLOOR(2.3), FLOOR(-2.3), RAND(), RAND(8), ROUND(2.3, 1), TRUNCATE(2.36, 1);

在这里插入图片描述

2.字符串函数

函数名用法
CHAE_LENGTH(s)返回字符串s的字符数,作用于CHARACTER_LENGTH(s)相同
LENGTH(s)返回字符串s的字节数,和字符集有关
CONCAT(s1,s2,s3……)连接s1,s2……,Sn作为一个字符串
INSERT(str, idx, len, replaceStr)将字符串str从第idx位置开始,len个字符长的子串替换为字符串replaceStr
REPLACE(str, a, b)用字符串b替换字符串str中所有出现的字符串a
UPPER(s)或UCASE(s)将字符串s的所有字母转成大写字母
LOWER(s)或LCASE(s)将字符串s的所有字母转成小写字母
LEFT(str, n)返回字符串str最左边的n个字符
RIGHT(str, n)返回字符串str最右边的n个字符
TRIM(s)去掉字符串s的开始与结尾的空格
SUBSTR(s, index, len)返回从字符串s的index位置去len个字符
FIND_IN_SET(s1, s2)返回字符串s1在字符串s2中出现的位置,其中s2字符串是一个一逗号分割的字符串
REVERSE(s)返回s反转后的字符串
NULLIF(value1, value2)比较两个字符串,如果value1与value2相等,则返回NULL,否则返回value1

示例:

SELECT CHAR_LENGTH('abc') , CONCAT('%','娃娃','%') , FIND_IN_SET('aa','cc,dd,aa,bb,gg,aa');

在这里插入图片描述

3.时间函数

常用的有:

获取当前时间:

​ now() 获取当前详细时间,返回 YYYY-MM-DD HH:MM:SS

​ curdate() 获取当前年月日,返回 YYYY-MM-DD

​ curtime() 考虑系统的时区,返回 HH:MM:SS

​ utc_date() utc_time() 不会考虑时区,返回 HH:MM:SS

时间部分提取:

​ year(时间) 获取传入的时间参数的年份,返回 YYYY

​ month(时间) 获取传入的时间参数的月份,返回 MM

​ week(时间) 获取传入的时间参数的周期,返回的是距离跨年的星期数

​ weekday(时间) 获取传入的时间参数的日期,返回 D(即星期几,其中0是星期1 ,即所有的返回值加一,则是当前的日期)

​ dayofweek(时间) 获取传入的时间参数的日期,返回 D(即星期几,其中1是星期1 )

示例:

SELECT NOW(), CURDATE(), CURTIME(), UTC_DATE(),UTC_TIME(), YEAR(NOW()), MONTH(NOW()), WEEK(NOW()), WEEKDAY(NOW()), DAYOFWEEK(NOW()), DAY(NOW()), DAYOFMONTH(NOW());

在这里插入图片描述

时间运算:

​ adddate | date_add(时间锚点,interval ± 值 对应时间单位的英文 day month year…)

​ subdate | date_sub(时间锚点,interval ±值 对应时间单位的英文 day month year…)

​ addtime(时间,秒) 时间的±秒的时间运算

​ datediff(日期,日期) 算两个日期之间间隔的天

​ timediff(时间,时间) 算两个时间间隔时间 时:分:秒

示例:

SELECT ADDDATE(NOW(),INTERVAL 1 MONTH), ADDDATE(NOW(),INTERVAL -1 MONTH), ADDTIME('10:10:10',20), ABS(DATEDIFF(CURDATE(),'2024-11-11')) , TIMEDIFF('12:00:00','10:00:00');

在这里插入图片描述

时间格式化输出:

​ DATE_FORMAT(date, format_string) 将日期或时间格式化为指定的format_string

​ DATE_FORMAT(时间,’格式字符串‘)

​ TIME_FORMAT(time, format_string) 将时间格式化为指定的format_string

​ TIME_FORMAT(时间,’格式字符串‘)

​ ♦️STR_TO_DATE(non_standard_date_string, format_string) 将非标准的日期字符解析为标准的日期格式字符

​ STR_TO_DATE(‘非标注时间字符串’,‘非标注时间字符串对应的格式’)

关于时间格式化的占位符:

格式描述格式描述
%a缩写星期名%pAM 或 PM
%b缩写月名%r时间,12-小时(hh:mm:ss AM 或 PM)
%c月,数值%S秒(00-59)
%D带有英文前缀的月中的天%s秒(00-59)
%d月的天,数值(00-31)%T时间, 24-小时 (hh:mm:ss)
%e月的天,数值(0-31)%U周 (00-53) 星期日是一周的第一天
%f微秒%u周 (00-53) 星期一是一周的第一天
%H小时 (00-23)%V周 (01-53) 星期日是一周的第一天,与 %X 使用
%h小时 (01-12)%v周 (01-53) 星期一是一周的第一天,与 %x 使用
%I小时 (01-12)%W星期名
%i分钟,数值(00-59)%w周的天 (0=星期日, 6=星期六)
%j年的天 (001-366)%X年,其中的星期日是周的第一天,4 位,与 %V 使用
%k小时 (0-23)%x年,其中的星期一是周的第一天,4 位,与 %v 使用
%l小时 (1-12)%Y年,4 位
%M月名%y年,2 位
%m月,数值(00-12)

示例:

SELECT NOW();

在这里插入图片描述

SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日');

在这里插入图片描述

SELECT TIME_FORMAT(NOW(),'%H:%i:%s');

在这里插入图片描述

# 前端-> 2024年04月20日 -> 后端 -> 数据库 -> str_to_date -> 标准时间 ->   '2024-04-20'
SELECT STR_TO_DATE('2024年04月20日' , '%Y年%m月%d日');

在这里插入图片描述

4.流程函数

i. IF函数

用于sql执行条件时的判断,类似于三目表达式

IF(condition, true_value, false_value)

解释:当 condition 成立时,返回 true_value,否则返回 false_value。

ii. IFNULL函数

用于对NULL值的处理

IFNULL(column, null_value)

解释:当指定列column值为NULL时,去null_value的值作为结果。

iii. CASE函数

# 语法:
# 格式1:
# 当condition的值为真的时候,输出对应的result,从上倒下扫描,满足一条则输出完毕后结束CASE语句
CASE
	WHERE condition1  THEN result1	 # 自带break的操作
	WHERE condition2  THEN result2
	WHERE condition3  THEN result3	
	WHERE condition4  THEN result4
	……
	ELSE 
END [AS 别名]  # 当需要用到起别名这种方法的时候再用

# 格式2
# 当expr表达式的返回值满足下面哪个value值时,就输出对应的result值,从上倒下扫描,满足一条则输出完毕后结束CASE语句
CASE expr
	WHERE  value1 THEN result1	 # 自带break的操作
	WHERE  value2 THEN result2
	WHERE  value3 THEN result3
	WHERE  value4 THEN result4
	……
	ELSE 
END [AS 别名]		# 当需要用到起别名这种方法的时候再用

整体示例:

# 根据员工生日,如果在1990年前,则加薪10%,否则加薪5%
SELECT ename, salary, birthday, IF(YEAR(birthday) < 1990, salary * 1.1, salary * 1.05) AS new_salary FROM t_employee;
SELECT ename, salary, birthday, ROUND(IF(YEAR(birthday) < 1990, salary * 1.1, salary * 1.05),1) AS new_salary FROM t_employee;

# 查询员工编号和性别,并生成一个type列,其内容根据性别显示男员工or女员工
SELECT eid, ename, gender, IF(gender = '男', '男员工', '女员工' ) AS TYPE FROM t_employee;

# 查询员工的姓名和工资以及奖金数额度(奖金 = salary * commission_pct)
SELECT ename, salary, salary * IFNULL(commission_pct, 0) AS 金数额度 FROM t_employee;

# 查看姓名,性别,以及补助金额(补助金额按照性别的基准值*commission_pct),男性的基准值为2000,女性为3000
# 使用case when
SELECT ename, gender, commission_pct,
	CASE
		WHEN gender = "女" THEN 2000 * IFNULL(commission_pct, 0)
		WHEN gender = "男" THEN 3000 * IFNULL(commission_pct, 0)
		ELSE 0	
	END AS 补助金额1
	FROM t_employee;
	
# 使用case 表达式|列名 when value then result
SELECT ename, gender, commission_pct,
	CASE gender
		WHEN "女" THEN 2000 * IFNULL(commission_pct, 0)
		WHEN "男" THEN 3000 * IFNULL(commission_pct, 0)
		ELSE 0	
	END AS 补助金额2
	FROM t_employee;

多行函数

聚合函数

对一群数据进行集中处理(求和,最小/大值,平均值)

函数名用法
AVG(列名)计算某一列的平均值(数值类型)
SUM(列名)计算某一列的和(数值类型)
MIN(列名)计算某一列的最小值(任意类型)
MAX(列名)计算某一列的最大值(任意类型)
COUNT(列名 / * / 1)计算某一列或者行的出现次数;其中1是代表行,1代表第一行;* 表示所有列(任意类型)

注:聚合函数不能嵌套

示例:

# 求平均工资,最大最小值,总工资
SELECT AVG(salary), MIN(salary), MAX(salary), SUM(salary) FROM t_employee;

# 求最大年龄和最小年龄
SELECT MIN(birthday) AS 最大生日, MAX(birthday) AS 最小生日 FROM t_employee; 

# 求员工数量和有奖金的员工数量
SELECT COUNT(*), COUNT(1),COUNT(commission_pct) FROM t_employee;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/749122.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

振弦采集仪在大型工程安全监测中的应用探索

振弦采集仪在大型工程安全监测中的应用探索 振弦采集仪是一种用于监测结构振动和变形的设备&#xff0c;它通过采集振弦信号来分析结构的动态特性。在大型工程安全监测中&#xff0c;振弦采集仪具有重要的应用价值&#xff0c;可以帮助工程师和监测人员实时了解结构的状况&…

红队内网攻防渗透:内网渗透之内网对抗:横向移动篇Kerberos委派安全非约束系约束系RBCD资源系Spooler利用

红队内网攻防渗透 1. 内网横向移动1.1 委派安全知识点1.1.1 域委派分类1.1.2 非约束委派1.1.2.1 利用场景1.1.2.2 复现配置:1.1.2.3 利用思路1:诱使域管理员访问机器1.1.2.3.1 利用过程:主动通讯1.1.2.3.2 利用过程:钓鱼1.1.2.4 利用思路2:强制结合打印机漏洞1.1.2.5 利用…

利用Linked SQL Server提权

点击星标&#xff0c;即时接收最新推文 本文选自《内网安全攻防&#xff1a;红队之路》 扫描二维码五折购书 利用Linked SQL Server提权 Linked SQL server是一个SQL Server数据库中的对象&#xff0c;它可以连接到另一个SQL Server或非SQL Server数据源&#xff08;如Oracle&a…

Techviz:XR协作工作流程,重塑远程电话会议新形式

在当今快速发展的数字环境中&#xff0c;无缝远程协作的需求正在成为企业多部门协同工作的重中之重&#xff0c;尤其是对于制造业、建筑和设计等行业的专业人士而言&#xff0c;这一需求更加迫切。传统的远程电话会议协作形式存在着延滞性&#xff0c;已经渐渐跟不上当今快节奏…

脑洞爆裂,OLED透明屏与红酒柜相结合

当OLED透明屏与红酒柜相结合时&#xff0c;我们可以设想一个极具创新性和实用性的产品&#xff0c;将科技美学与品酒文化完美融合。以下是我为这种结合提出的一些创新设想&#xff1a; 透明展示与虚拟标签 透明展示&#xff1a;OLED透明屏能够直接安装在红酒柜的玻璃门或侧面&a…

面试突击指南:Java基础面试题3

1.介绍下进程和线程的关系 进程:一个独立的正在执行的程序。 线程:一个进程的最基本的执行单位,执行路径。 多进程:在操作系统中,同时运行多个程序。 多进程的好处:可以充分利用CPU,提高CPU的使用率。 多线程:在同一个进程(应用程序)中同时执行多个线程。 多线程…

Redis 7.x 系列【9】数据类型之自动排重集合(Set)

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 前言2. 常用命令2.1 SADD2.2 SCARD2.3 SISMEMBER2.4 SREM2.5 SSCAN2.6 SDIFF2.7 SU…

Jmeter,badboy学习

1、注意Jmeter与jdk之间的版本对应 2、Jmeter的作用&#xff1a; jmeter可以做接口测试和压力测试。其中接口测试的简单操作包括做http脚本&#xff08;发get/post请求、加cookie、加header、加权限认证、上传文件&#xff09;、做webservice脚本、参数化、断言、关联&#x…

Polyplus转染试剂的优点,你知道吗?

Polyplus专注于为生命科学研究、体内转染、生物制品制造以及细胞和基因治疗的客户&#xff0c;提供创新的核酸递送解决方案。其深耕转染领域&#xff0c;产品力强劲。在科研领域&#xff0c;其产品转染效果以及价格都优于lipo系列。无论是在基础科学研究中&#xff0c;还是在临…

Node.js下载及安装详细教程

目录 Node.js安装详细教程 下载安装环境变量配置文件结构配置npm在安装全局模块时的路径和缓存cache的路径测试常见命令 Node.js安装详细教程 &#x1f441;官网下载地址:Download | Node.js (nodejs.org) 下载速度慢的话 可以使用网盘下载&#xff1a; https://pan.quark.…

文心一言 VS 讯飞星火 VS chatgpt (290)-- 算法导论21.3 3题

三、给出一个包含 m 个 MAKE-SET 、UNION 和 FINDSET 操作的序列(其中有 n 个是 MAKE-SET 操作)&#xff0c;当仅使用按秩合并时&#xff0c;需要 Ω(mlgn) 的时间。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 在并查集&#xff08;Union-Find&#xff09;数…

RabbitMQ WEB管理端介绍

页面功能概览 Overview(概述)Connections(连接)Channels(通道)Exchanges(交换器)Queues(队列)Admin(用户管理)。 1. Overview(概述) 主要分为三部分 1.1 Queued messages&#xff08;所有队列的消息情况&#xff09; Ready&#xff1a;待消费的消息总数Unacked&#xff1a;待应…

今日好料(网易数据治理白皮书)

今日好料&#xff08;网易数据治理白皮书&#xff09; 在当前的数字经济时代&#xff0c;数据已经成为企业最重要的资产之一。然而&#xff0c;如何管理和利用这些数据&#xff0c;成为企业成功的关键所在。本文将探讨数据治理的概念、重要性及其实施策略&#xff0c;结合网易…

国标GB/T 28181详解:国标GBT28181-2022的目录通知流程

目录 一、定义 二、作用 1、实时同步设备目录状态 2、优化资源管理和调度 3、增强系统的可扩展性和灵活性 4、提高系统的可靠性和稳定性 5、支持多级级联和分布式部署 6、便于用户管理和监控 三、基本要求 1、目录通知满足以下基本要求 2、关键要素 &#xff08;1…

Python调用外部系统命令详细讲解

利用Python调用外部系统命令的方法可以提高编码效率。调用外部系统命令完成后可以通过获取命令执行返回结果码、命令执行的输出结果进行进一步的处理。本文主要描述Python常见的调用外部系统命令的方法&#xff0c;包括os.system()、os.popen()、subprocess.Popen()等。 本文分…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【14】缓存与分布式锁

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【14】缓存与分布式锁 缓存本地缓存分布式缓存-本地模式在分布式下的问题分布式缓存整合 redis 作为缓存JMeter测试出OutOfDirectMemoryError【堆外内存溢出】 高并发读下缓存失效问题缓存…

操纵系统的特征调度算法

操纵系统的特征 调度算法是操作系统用来决定各个进程/作业在CPU上执行顺序的方法。最常见的调度算法有&#xff1a;FCFS、SJF、HRRN、RR、HPF和MFQ。这集先介绍前三个 先来先服务 FCFS 根据作业到达的先后顺序调度&#xff0c;CPU会一直运行直到作业结束&#xff0c;所以这个…

iptables(12)实际应用举例:策略路由、iptables转发、TPROXY

简介 前面的文章中我们已经介绍过iptables的基本原理,表、链的基本操作,匹配条件、扩展模块、自定义链以及网络防火墙、NAT等基本配置及原理。 这篇文章将以实际应用出发,列举一个iptables的综合配置使用案例,将我们前面所涉及到的功能集合起来,形成一个完整的配置范例。…

安全:Linux重要安全配置之关闭常规ssh链接-开启密钥方式链接-防入侵非常重要以及有效的一项操作

https://doc.youyacao.com/88/2154 安全&#xff1a;Linux重要安全配置之关闭常规ssh链接-开启密钥方式链接-防入侵非常重要以及有效的一项操作 问题背景 优雅草官方的服务器长期被各类牛鬼蛇神来搞事情&#xff0c;之前其中有一台测试服由于属于管理和维护&#xff0c;安全…

【直播倒计时】面向AI领域的开发工程师:TinyML在国产FPGA的边缘AI加速应用

TinyML是机器学习中的一个新兴领域&#xff0c;专注于开发可在低功耗、内存受限的设备上运行的算法和模型。其核心目标是将先进的机器学习算法和模型移植到体积小巧、能耗极低的嵌入式设备中&#xff0c;使这些设备具备边缘智能&#xff0c;能够在没有外部服务器支持的情况下进…