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

07_MySQL的单行函数

1. 函数的理解

1.1 什么是函数

函数在计算机语言的使用中贯穿始终,函数的作用是什么呢?它可以把我们经常使用的代码封装起来,需要的时候直接调用即可。这样既提高了代码效率 ,又提高了可维护性 。在 SQL 中我们也可以使用函数对检索出来的数据进行函数操作。使用这些函数,可以极大地提高用户对数据库的管理效率 。

从函数定义的角度出发,我们可以将函数分成内置函数自定义函数 。在 SQL 语言中,同样也包括了内置函数和自定义函数。内置函数是系统内置的通用函数,而自定义函数是我们根据自己的需要编写的

1.2 不同DBMS函数的差异

我们在使用 SQL 语言的时候,不是直接和这门语言打交道,而是通过它使用不同的数据库软件,即DBMS。DBMS之间的差异性很大,远大于同一个语言不同版本之间的差异。实际上,只有很少的函数是被 DBMS 同时支持的。比如,大多数 DBMS 使用(||)或者(+)来做拼接符,而在 MySQL 中的字符串拼接函数为concat()。大部分 DBMS 会有自己特定的函数,这就意味着采用 SQL 函数的代码可移植性是很差的,因此在使用函数的时候需要特别注意。

1.3 MySQL的内置函数及分类

MySQL提供了丰富的内置函数,这些函数使得数据的维护与管理更加方便,能够更好地提供数据的分析与统计功能,在一定程度上提高了开发人员进行数据分析与统计的效率。MySQL提供的内置函数从实现的功能角度可以分为数值函数、字符串函数、日期和时间函数、流程控制函数、加密与解密函数、获取MySQL信息函数、聚合函数等。这里,我将这些丰富的内置函数再分为两类: 单行函数聚合函数(或分组函数) 。

单行函数

  • 操作数据对象

  • 接受参数返回一个结果

  • 只对一行进行变换

  • 每行返回一个结果

  • 可以嵌套

  • 参数可以是一列或一个值


2. 数值函数

2.1 基本函数

代码测试:

SELECT ABS(-123),ABS(32),SIGN(-23),SIGN(43),PI(),CEIL(32.32),CEILING(-43.23),
FLOOR(32.32),FLOOR(-43.23),MOD(12,5)
FROM DUAL;
#RAND(X) 若x相同,则会生成相同的随机数
SELECT RAND(),RAND(),RAND(10),RAND(10),RAND(-1),RAND(-1)
FROM DUAL;
# ROUND函数与TRUNCATE函数的测试
SELECT
ROUND(12.33),ROUND(12.343,2),ROUND(12.324,-1),TRUNCATE(12.66,1),TRUNCATE(12.66,-1)
FROM DUAL;

2.2 角度与弧度互换函数

SELECT 
RADIANS(30),RADIANS(45),RADIANS(60),RADIANS(90),DEGREES(2*PI()),DEGREES(RADIANS(60))
FROM DUAL;

2.3 三角函数

#三角函数
SELECT SIN(RADIANS(30)),DEGREES(ASIN(1))
FROM DUAL;

2.4 指数与对数

#测试代码
SELECT POW(2,5),POWER(2,4),EXP(2),LN(10),LOG10(10),LOG2(4)
FROM DUAL;

2.5 进制间的转换

#进制之间的转化
SELECT BIN(10),HEX(10),OCT(10),CONV(10,2,8)
FROM DUAL;

3. 字符串函数

注意:MySQL中,字符串的位置是从1开始的。

#字符串函数
SELECT FIELD('mm','hello','msm','amma'),FIND_IN_SET('mm','hello,mm,amma')
FROM DUAL;
SELECT INSERT('helloworld',2,3,'aaaaa'),REPLACE('hello','ll','mmm')
FROM DUAL;

4. 日期和时间函数

4.1 获取日期、时间

#日期、时间函数
SELECT
CURDATE(),CURTIME(),NOW(),SYSDATE()+0,UTC_DATE(),UTC_DATE()+0,UTC_TIME(),UTC_TIME()+0
FROM DUAL;

4.2 日期与时间戳的转换

何为时间戳?

时间戳就是从1970年1月1日0时0分0秒到当前时间点的所有秒数。
1970.1.1 0:0:0 这个时间就是IT中所谓的“时间纪元”,相信大家在很多文章中都见过它。
比如oracle的时间显示,unix和linux系统的时间运算等,那为什么选择1970,而不选择1900呢。接下来让我们阐述它的由来。
#代码测试
#日期与时间戳的转换
SELECT UNIX_TIMESTAMP(NOW()),UNIX_TIMESTAMP(CURDATE()),UNIX_TIMESTAMP(CURTIME()),FROM_UNIXTIME(1677118000)
FROM DUAL;

4.3 获取月份、星期、星期数、天数等函数

SELECT YEAR(CURDATE()),MONTH(CURDATE()),DAY(CURDATE()),HOUR(CURTIME()),MINUTE(NOW()),SECOND(SYSDATE())
FROM DUAL;

4.4 日期的操作函数

EXTRACT(type FROM date)函数中type的取值与含义:

SELECT EXTRACT(MINUTE FROM NOW()),EXTRACT( WEEK FROM NOW()),
EXTRACT( QUARTER FROM NOW()),EXTRACT( MINUTE_SECOND FROM NOW())
FROM DUAL;

4.5 时间和秒钟转换的函数

SELECT TIME_TO_SEC(NOW()), SEC_TO_TIME(61000)
FROM DUAL;

4.6 计算日期和时间的函数

上述函数中type的取值:

SELECT DATE_ADD(NOW(), INTERVAL 1 DAY) AS col1,DATE_ADD('2021-10-21 23:32:12',INTERVAL1 SECOND) AS col2,
ADDDATE('2021-10-21 23:32:12',INTERVAL 1 SECOND) AS col3,
DATE_ADD('2021-10-21 23:32:12',INTERVAL '1_1' MINUTE_SECOND) AS col4,
DATE_ADD(NOW(), INTERVAL -1 YEAR) AS col5, #可以是负数
DATE_ADD(NOW(), INTERVAL '1_1' YEAR_MONTH) AS col6 #需要单引号
FROM DUAL;
SELECT
ADDTIME(NOW(),20),SUBTIME(NOW(),30),SUBTIME(NOW(),'1:1:3'),DATEDIFF(NOW(),'2021-10-01'),
TIMEDIFF(NOW(),'2021-10-25 22:10:10'),FROM_DAYS(366),TO_DAYS('0000-12-25'),
LAST_DAY(NOW()),MAKEDATE(YEAR(NOW()),12),MAKETIME(10,21,23),PERIOD_ADD(20200101010101,10)
FROM DUAL;

4.7 日期的格式化与解析

上述函数中fmt参数常用的格式符:

GET_FORMAT函数中date_type和format_type参数取值如下:

SELECT DATE_FORMAT(NOW(), '%H:%i:%s'),STR_TO_DATE('09/01/2009','%m/%d/%Y'),STR_TO_DATE('20140422154706','%Y%m%d%H%i%s'),
STR_TO_DATE('2014-04-22 15:47:06','%Y-%m-%d %H:%i:%s'),GET_FORMAT(DATE, 'USA'),DATE_FORMAT(NOW(),GET_FORMAT(DATE,'USA')),
STR_TO_DATE('2020-01-01 00:00:00','%Y-%m-%d') FROM DUAL;

5. 流程控制函数

流程处理函数可以根据不同的条件,执行不同的处理流程,可以在SQL语句中实现不同的条件选择。
MySQL中的流程处理函数主要包括IF()、IFNULL()和CASE()函数。

#4.4 CASE ... WHEN ... THEN ... WHEN ... THE ... ELSE ... END

/*
练习1:查询部门号为 10,20, 30 的员工信息, 
若部门号为 10, 则打印其工资的 1.1 倍, 
20 号部门, 则打印其工资的 1.2 倍, 
30 号部门打印其工资的 1.3 倍数。
其他部门,打印其工资的1.4倍数
*/
#实现方式一:
SELECT employee_id,last_name,department_id,salary,CASE department_id WHEN 10 THEN salary *1.1WHEN 20 THEN salary *1.2WHEN 30 THEN salary *1.3ELSE salary * 1.4 END "detalis"
FROM employees;
#实现方式二:
SELECT employee_id,last_name,department_id,salary,CASE WHEN department_id = 10 THEN salary * 1.1WHEN department_id = 20 THEN salary * 1.2WHEN department_id = 30 THEN salary * 1.3ELSE salary * 1.4 END "detalis"
FROM employees;

6. 加密与解密函数

加密与解密函数主要用于对数据库中的数据进行加密和解密处理,以防止数据被他人窃取。这些函数在
保证数据库安全时非常有用。
SELECT MD5('mysql'),SHA('mysql'),MD5(MD5('mysql'))
FROM DUAL;
# ENCODE() \ DECODE() PASSWORD()在mysql1  8.0 中弃用
SELECT ENCODE('atguigu','mysql'),DECODE(ENCODE('atguigu','mysql'),'mysql')
FROM DUAL;

7. MySQL信息函数

MySQL中内置了一些可以查询MySQL信息的函数,这些函数主要用于帮助数据库开发或运维人员更好地对数据库进行维护工作。
SELECT USER(), CURRENT_USER(), SYSTEM_USER(),SESSION_USER(),CHARSET('ABC'),COLLATION('ABC')
FROM DUAL;

8. 其他函数

MySQL中有些函数无法对其进行具体的分类,但是这些函数在MySQL的开发和运维过程中也是不容忽视的。
SELECT INET_ATON('192.168.1.100'),CHARSET('mysql'), CHARSET(CONVERT('mysql' USING 'utf8'))
FROM DUAL;

相关文章:

07_MySQL的单行函数

1. 函数的理解1.1 什么是函数函数在计算机语言的使用中贯穿始终,函数的作用是什么呢?它可以把我们经常使用的代码封装起来,需要的时候直接调用即可。这样既提高了代码效率 ,又提高了可维护性 。在 SQL 中我们也可以使用函数对检索…...

QML 第一个应用程序Window

1.创建QML工程 新建文件或者项目-->选择Qt Quick Application 然后生成了一个默认的Window 2.main.cpp中如何加载的qml文件 QQmlApplicationEngine提供了从单个QML文件加载应用程序的便捷方式。 此类结合了QQmlEngine和QQmlComponent,以提供一种方便的方式加载…...

RedisAI编译安装(一)

1.概述 RedisAI 是一个 Redis 模块,用于执行深度学习/机器学习模型并管理其数据。它的目的是成为模型服务的“主力”,通过为流行的 DL/ML 框架和无与伦比的性能提供开箱即用的支持。RedisAI 遵循数据局部性原则,最大限度地提高计算吞吐量并减…...

换掉 Maven,我就用Gradle,急速编译

相信使用Java的同学都用过Maven,这是一个非常经典好用的项目构建工具。但是如果你经常使用Maven,可能会发现Maven有一些地方用的让人不太舒服: Maven的配置文件是XML格式的,假如你的项目依赖的包比较多,那么XML文件就…...

22.2.26打卡 Codeforces Round #853 (Div. 2)

A题极端考虑, 只要存在一个前缀数组的最大公约数小于等于2, 将其放在数组最前端, 那么保证能够满足题目要求数据范围这么小, 果断暴力Serval and Mochas Array题目描述Mocha likes arrays, and Serval gave her an array consisting of positive integers as a gift.Mocha thin…...

结构体字节对齐、偏移量

复习下struct的大小、成员偏移量offsetof,说下我的理解: 64位下默认对齐数default8原则1:struct中每一个成员变量tmp的对齐数realmin{default,tmp} struct Student {int num;//0char name[8];double score; } stu; 这个结构体stu中&#x…...

全网最全——Java 数据类型

一、数据类型方法论 程序本质上是对数据的处理(逻辑运算),因此任何语言都需先解决如何表征【数据】这个核心概念。数据作为抽象的概念,天然的包含2个方面属性: 类型:类型决定了数据只能和同类型的数据进行…...

数据结构基础之动态数组

目录 前言 1、Java中的数组 2、实现动态数组 2.1、基本类结构设计 2.2、添加元素 2.3、查询&修改元素 2.4、包含&搜索&删除 2.5、数组扩容 前言 今天我们来学习一下关于数据结构的一些基础知识,数据结构研究的是数据如何在计算机中进行组织和存…...

【跟我一起读《视觉惯性SLAM理论与源码解析》】第九章 地图点、关键帧以及图结构

这一章主要讲了一些基本内容,包括ORB-SLAM2中地图点,关键帧图结构的问题 地图点和特征点的关系?有时候地图点对应不同帧上的特征点,特征点可以通过三角化得到地图点地图点的几个属性,平均观测方向,以及观测…...

网络安全——数据链路层安全协议(2)

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.局域网数据链路层安全协议 1.IEEE 802.10 (1)IEE…...

【华为OD机试模拟题】用 C++ 实现 - 热点网络统计(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明热点网络统计【华为OD机试模拟题】题目输入输出描述示例一输入输出示例二输入输出Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出…...

人工智能学习07--pytorch09--LeNet

参考: 视频: https://www.bilibili.com/video/BV187411T7Ye/?spm_id_from333.999.0.0&vd_sourceb425cf6a88c74ab02b3939ca66be1c0d 博客:https://blog.csdn.net/STATEABC/article/details/123661612?utm_mediumdistribute.pc_feed_404.…...

java泛型编程初识

java泛型编程初识1.泛型解决的是什么问题2.泛型实例化语句3.自定义泛型1)自定义泛型类或接口2)自定义泛型方法4.泛型使用中的继承和通配1)通配2)继承使用限制1.泛型解决的是什么问题 很多类、接口、方法中逻辑相同,只是操作的对象类型不同,这个时候就可…...

代码随想录算法训练营 || 贪心算法 1005 134 135

Day291005.K次取反后最大化的数组和力扣题目链接给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)以这种方…...

Spring框架面试题

springboot的自动装配原理 主类上的SpringBootApplication存在EnableAutoConfiguration,EnableAutoConfiguration会导入AutoConfigurationImportSelector组件,其AutoConfigurationImportSelector$AutoConfigurationGroup#process()方法会读取当前应用所有…...

纯x86汇编实现的多线程操作系统实践 - 第五章 AP的守护执行

AP的32位保护模式代码的后半部分从0x8001C000开始执行,完成的工作主要有:初始化必要的中断给BSP发送启动成功的消息创建各AP的系统进程创建各AP的用户进程循环显示各AP中用户进程执行的时间比例5.1 初始化中断5.1.1总体初始化各AP调用init_interrupt_fun…...

2023年全国最新高校辅导员精选真题及答案7

百分百题库提供高校辅导员考试试题、辅导员考试预测题、高校辅导员考试真题、辅导员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 71.在北京曾经发现一处战国时期的遗址,从中出土了燕、韩、赵、魏等国铸币3876…...

使用windwow windbg 吃透64位分页内存管理

前言 分页基础概念是操作系统基础知识,网上已经有太多太多了。所以本文记录使用windwow内核调试工具验证理论知识。 具体可以参阅intel volume3的 4.1.1 Four Paging Modes章节。 简而言之:CR0.PG 0表示不开启分页.并且根据CR4各种标志开启不同类别的…...

Java知识复习(五)JVM虚拟机

1、虚拟机的自动内存管理和C/C的区别 C/C开发程序时需要为每一个new操作去写对应的delete/free操作,不容易出现内存泄漏和溢出问题。而Java程序将内存控制权交给了Java虚拟机 2、JVM的运行机制 1、Java程序的具体运行过程如下: Java源文件被编译器编…...

房屋出租管理系统

1. 铺垫 1.1 项目真实开发的过程 上来要做什么???? 有电脑—》配环境(JDK、IDEA、MAVEN……) 这个项目:房屋管理系统 从什么角度出发,第一步做什么?? 架构 …...

2023年全国最新食品安全管理员精选真题及答案6

百分百题库提供食品安全管理员考试试题、食品安全员考试预测题、食品安全管理员考试真题、食品安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 51.制定《中华人民共和国食品安全法》的目的是为了保证食品安全&#xf…...

C++中的文件操作

文件操作 所有数据程序运行结束后都会释放通过文件可以将数据持久化头文件文件类型分为两种 文本文件—文件以文本的ASCII码形式存储在计算机中二进制文件—文件以文本的二进制存储在计算机中 操作文件的三大类 ofstream—写操作ifstream—读操作fstream—读写操作 文本文件 写…...

监控生产环境中的机器学习模型

简介 一旦您将机器学习模型部署到生产环境中,很快就会发现工作还没有结束。 在许多方面,旅程才刚刚开始。你怎么知道你的模型的行为是否符合你的预期?下周/月/年,当客户(或欺诈者)行为发生变化并且您的训练…...

15s了解什么是物联网技术

目录 15s了解什么是物联网技术 15s了解什么是物联网技术 什么是物联网技术。 简单地说,物联网就是把所有的物体连接起来,相互作用,形成一个互联互通的网络,这就是物联网。如果说互联网是我们身体的虚拟大脑,那么物联网就是我们身体的感知系统,就像眼睛和耳朵-样,让我们…...

敲出来的真理-mysql备份大全,备份命令,还原命令,定时备份

mysqldump命令全量备份数据全量标准语句格式mysqldump -h主机名 -P端口 -u用户名 -p密码 –database 数据库名 > 文件名.sql 1.备份全部数据库的数据和结构mysqldump -uroot -p123456 -A > /data/mysqlDump/mydb.sql2.备份全部数据库的结构(加 -d 参数&#x…...

ATTCK实战系列-红队评估(一)

from ATT&CK实战系列-红队评估(一) 环境搭建 下载地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/2/ 将三个虚拟机启动起来 除了windows 7那个主机,其他都只设置成仅主机模式 windows 7添加两个网卡,一个是仅主机,一个是NAT …...

学python的第二天---差分

一、改变数组元素(差分)方法一:差分数组map(int,input().split())for b in arr[:n]:print(1 if b else 0,end )方法二:区间合并interval.sort(keylambda x:x[0])二、差分a [0] list(map(int, input().split())) a[n 1:]三、差…...

数据结构入门5-2(数和二叉树)

目录 注: 树的存储结构 1. 双亲表示法 2. 孩子表示法 3. 重要:孩子兄弟法(二叉树表示法) 森林与二叉树的转换 树和森林的遍历 1. 树的遍历 2. 森林的遍历 哈夫曼树及其应用 基本概念 哈夫曼树的构造算法 1. 构造过程 …...

把Redis当作队列来用,到底合适吗?

文章目录 前言从最简单的开始:List 队列发布/订阅模型:Pub/Sub趋于成熟的队列:Stream1) Stream 是否支持「阻塞式」拉取消息?2) Stream 是否支持发布 / 订阅模式?3) 消息处理时异常,Stream 能否保证消息不丢失,重新消费?4) Stream 数据会写入到 RDB 和 AOF 做持久化吗?…...

Python学习-----项目设计1.0(设计思维和ATM环境搭建)

目录 前言: 项目开发流程 MVC设计模式 什么是MVC设计模式? ATM项目要求 ATM项目的环境搭建 前言: 我个人学习Python大概也有一个月了,在这一个月中我发布了许多关于Python的文章,建立了一个Python学习起步的专栏…...

wordpress站群在线订购/自媒体怎么做

一.常见问题 a.可以编译,不能执行的 AfxInitRichEdit(); b.升级默认的Riched版本(默认的有一些bug),如 可在InitInstance中添加 LoadLibrary("RICHED20.DLL") 最后注意 FreeLibrary 如果是CRichEditView基类的可用 BOOL CXXXXXXView::PreCreateWin…...

网页设计毕业设计开题报告/北京seo不到首页不扣费

整数类型数据的运算函数一、bitshift 函数bitshift函数实现数据位移操作。bitshift(A,B)函数第二个参数为正,则对A的二进制数左移。第二个参数为负,则右移。bitshift(A,n,N),N表示移位后的数据最多只有N为,若超过N位,多余的位将被…...

备案网站还是域名/网站建设 全网营销

...

池州市网站建设优化/百度推广首次开户需要多少钱

谁发明了计算机?大多数人会说是美国人Mocheri和Ecatki. 他们两个人于1946年发明了名为“ ENIAC”的计算机.实际上,这是一种误解. 该计算机的真正发明者应该是德国人Conrad Zuse. 2010年6月22日是楚泽诞辰100周年.今天,在他出生的柏林市&#…...

企业信息年报系统/seo网站推广招聘

在国内7个城市启动建设后,中国人工智能技术受邀参与国外的城市治理。 1月29日,马来西亚数字经济发展机构(MDEC)和吉隆坡市政厅(DBKL)联合宣布引入阿里云ET城市大脑,人工智能将全面应用到马来西亚…...

网站的按钮怎么做 视频/网络营销的策划流程

在几个月之前,我在Firefox浏览器中发现了一个安全漏洞,这个漏洞就是CVE-2019-17016。在分析这个安全漏洞的过程中,我发现了一种新技术,即利用单一注入点从Firefox浏览器中提取CSS数据。在这篇文章中,我将跟大家详细介绍…...