MySQL基础篇补充 | 单行函数(数值函数、字符串函数、日期函数、流程控制函数、加密与解密函数、MySQL信息函数)

news2024/9/23 17:19:54

目录

一:单行函数

 1. 数值函数

(1)基本函数

(2)角度与弧度互换函数

(3)三角函数

(4)指数与对数

(5)进制间的转换

2. 字符串函数

3. 日期和时间函数

(1)获取日期、时间

(2)日期与时间戳的转换

(3) 获取月份、星期、星期数、天数等函数

(4)日期的操作函数

(5)时间和秒钟转换的函数

(6)计算日期和时间的函数 

(7)日期的格式化与解析

4. 流程控制函数

5. 加密与解密函数

6. MySQL信息函数

7. 其他函数


一:单行函数

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

        MySQL提供的内置函数从 实现的功能角度 可以分为数值函数、字符串函数、日期和时间函数、流程控制 函数、加密与解密函数、获取MySQL信息函数、聚合函数等。这里,我将这些丰富的内置函数再分为两类: 单行函数 聚合函数(或分组函数)

两种SQL函数

单行函数

①操作数据对象; 

②接受参数返回一个结果;

③只对一行进行变换; 

④每行返回一个结果;

⑤可以嵌套;

⑥参数可以是一列或一个值;

 1. 数值函数

(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;

执行结果:

②第二组 

测试: 

SELECT RAND(),RAND(),RAND(10),RAND(10),RAND(-1),RAND(-1)
FROM DUAL;

执行结果:

③第三组

测试: 

SELECT 
ROUND(12.33),ROUND(12.343,2),ROUND(12.324,-1),TRUNCATE(12.66,1),TRUNCATE(12.66,-1),SQRT(2)
FROM DUAL;

执行结果: 

(2)角度与弧度互换函数

 测试:

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

执行结果: 

(3)三角函数

测试: 

SELECT 
SIN(RADIANS(30)),DEGREES(ASIN(1)),TAN(RADIANS(45)),DEGREES(ATAN(1))
FROM DUAL;

执行结果:

(4)指数与对数

测试:

SELECT POW(2,5),POWER(2,4),EXP(2),LN(10),LOG10(10),LOG2(4)
FROM DUAL;

执行结果: 

(5)进制间的转换

测试:

SELECT BIN(10),HEX(10),OCT(10),CONV(10,2,8)
FROM DUAL;

执行结果:

2. 字符串函数

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

①第一组

测试:ASCII、CHAR_LENGTH、LENGTH

SELECT ASCII('Abcdfsf'),CHAR_LENGTH('hello'),CHAR_LENGTH('我们'),
LENGTH('hello'),LENGTH('我们')
FROM DUAL;

执行结果:

测试:CONCAT、CONCAT_WS

SELECT CONCAT(e1.ename,' worked for ',e2.ename)
FROM emp e1
JOIN emp e2
ON e1.mgr = e2.empno;

SELECT CONCAT_WS('-','hello','world','hello','beijing')
FROM DUAL;

执行结果:

测试:INSERT、REPLACE

SELECT INSERT('helloworld',2,3,'aaaaa'),REPLACE('hello','ll','mm')
FROM DUAL;

执行结果:

测试: UPPER、LOWER

SELECT UPPER('HelLo'),LOWER('HelLo')
FROM DUAL;

执行结果:

测试:LEFT、RIGHT

SELECT LEFT('hello',2),RIGHT('hello',3),RIGHT('hello',13)
FROM DUAL;

执行结果:

测试:LPAD(实现左对齐)、RPAD(实现右对齐);小数点也算一位

SELECT ename,LPAD(sal,8,'*')
FROM emp;

执行结果:

②第二组

测试:LTRIM、RTRIM

select concat('--->',LTrim('  123   '),'<---'),concat('--->',RTrim('  123   '),'<---')
from dual;

执行结果:

测试:TRIM

SELECT CONCAT('--->',TRIM('  123   '),'<---')
FROM DUAL;

SELECT CONCAT('--->',TRIM( 'a' FROM 'aabbcca'),'<---')
FROM DUAL;

SELECT CONCAT('--->',TRIM(LEADING 'a' FROM 'aabbcca'),'<---'),CONCAT('--->',TRIM(TRAILING 'a' FROM 'aabbcca'),'<---')
FROM DUAL;

 执行结果:

③第三组

测试:REPEAT、SPACE、STRCMP

SELECT REPEAT('hello',4),CONCAT(1,SPACE(5),2),STRCMP('abc','abe')
FROM DUAL;

执行结果:

测试:SUBSTR、LOCATE

SELECT SUBSTR('hello',2,2),LOCATE('ll','hello')
FROM DUAL;

执行结果:

测试:ELT、FIFLD、FIND_IN_SET

SELECT ELT(2,'a','b','c','d'),FIELD('mm','gg','jj','mm','dd','mm'),
FIND_IN_SET('mm','gg,mm,jj,dd,mm,gg')
FROM DUAL;

执行结果:

测试:REVERSE、NULLIF

SELECT REVERSE("abcd") 
FROM DUAL;

SELECT empno,NULLIF(LENGTH(ename),LENGTH(job)) 'compare'
FROM emp;

执行结果: 

3. 日期和时间函数

(1)获取日期、时间

测试:

select curdate(),curTime(),now(),utc_date(),utc_time()
from dual;

执行结果:

(2)日期与时间戳的转换

测试: 

SELECT UNIX_TIMESTAMP(),UNIX_TIMESTAMP(NOW()),UNIX_TIMESTAMP('1999-01-01'),FROM_UNIXTIME(UNIX_TIMESTAMP(NOW()))
FROM DUAL;

执行结果:

(3) 获取月份、星期、星期数、天数等函数

测试: 

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

执行结果: 

测试: 

SELECT MONTHNAME('2021-10-26'),DAYNAME('2021-10-26'),WEEKDAY('2021-10-26'),
QUARTER(CURDATE()),WEEK(CURDATE()),DAYOFYEAR(NOW()),
DAYOFMONTH(NOW()),DAYOFWEEK(NOW())
FROM DUAL;

执行结果: 

(4)日期的操作函数

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

测试: 

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

执行结果: 

(5)时间和秒钟转换的函数

测试:

select time_to_sec(now()),sec_to_time(TIME_TO_SEC(NOW()))
from dual;

执行结果:

(6)计算日期和时间的函数 

第1组:

 以下两个函数记住一个就行,使用DATE_ADD的INTERVAL值设置为负数就能达到DATE_SUB的效果!

上述函数中type的取值:

测试:

SELECT DATE_ADD(NOW(), INTERVAL 1 DAY) AS col1,DATE_ADD('2021-10-21 23:32:12',INTERVAL 
1 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;

执行结果:

第2组:

测试:

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;

执行结果:

(7)日期的格式化与解析

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

GET_FORMAT函数(相当于DATE_FORMAT的提升版)中date_type和format_type参数取值如下:

格式化:日期 ---> 字符串

SELECT DATE_FORMAT(CURDATE(),'%Y-%M-%D'),
DATE_FORMAT(NOW(),'%Y-%m-%d'),TIME_FORMAT(CURTIME(),'%h:%i:%S'),
DATE_FORMAT(NOW(),'%Y-%M-%D %h:%i:%S %W %w %T %r')
FROM DUAL;

执行结果:

解析:字符串 ----> 日期

SELECT STR_TO_DATE('2021-October-25th 11:37:30 Monday 1','%Y-%M-%D %h:%i:%S %W %w')
FROM DUAL;

执行结果:

测试:ET_FORMAT、DATE_FORMAT

SELECT GET_FORMAT(DATE,'USA')
FROM DUAL;

SELECT DATE_FORMAT(CURDATE(),GET_FORMAT(DATE,'USA'))
FROM DUAL;

 执行结果:

4. 流程控制函数

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

测试:if

# 判断工资
SELECT ename,IF(sal >= 3000,'高工资','低工资') "details"
FROM emp;
# comm为null就转换成0
SELECT ename,(sal+IF(comm IS NOT NULL,comm,0))*12 AS yearSal
FROM emp;

执行结果:

测试:ifnull实际上是if的一种特殊情况

# 使用if
SELECT ename,(sal+IF(comm IS NOT NULL,comm,0))*12 AS yearSal
FROM emp;

#使用ifnull
SELECT ename,(sal+IFNULL(comm,0))*12 AS yearSal
FROM emp;

执行结果:

测试:CASE WHEN ... THEN ...WHEN ... THEN ... ELSE ... END

SELECT empno,ename,sal,CASE WHEN sal >=5000 THEN '老板'
			WHEN sal >=3000 THEN '潜力股'
			WHEN sal >=1000 THEN '小屌丝'
			ELSE '草根' -- 可以没有else
			END AS 'detail'
FROM emp;

执行结果:

测试:CASE.....WHEN ... THEN ...WHEN ... THEN ... ELSE ... END

需求:查询部门号为 10,20, 30 的员工信息, 若部门号为 10, 则打印其工资的 1.1 倍, 20 号部门, 则打印其 工资的 1.2 倍, 30 号部门打印其工资的 1.3 倍数。

SELECT empno,ename,sal,deptno,CASE deptno WHEN 10 THEN sal*1.1
					WHEN 20 THEN sal*1.2
					WHEN 30 THEN sal*1.3
					END AS 'detail'
FROM emp
WHERE deptno IN (10,20,30);

执行结果:

5. 加密与解密函数

加密与解密函数主要用于对数据库中的数据进行加密和解密处理,以防止数据被他人窃取。这些函数在 保证数据库安全时非常有用。

注:以上的PASSWORD、MD5、SHA加密方式都是不可逆的,其中PASSWORD在MySQL8中已经被弃用了!

SELECT MD5('zhang'),SHA('zhang')
FROM DUAL;

执行结果:

注:以上的ENCODE的加密方式是可逆的,实际上和DECODE是一对,ENCODE负责加密、DECODE负责解密。但是MySQL8.0也已经弃用了!

# MySQL8已经弃用,第二个参数'mysql'相当于某个加密的种子(或者说加密的方式)
SELECT ENCODE('atguigu','mysql'),DECODE(ENCODE('atguigu','mysql'),'mysql')
FROM DUAL;

6. MySQL信息函数

MySQL中内置了一些可以查询MySQL信息的函数,这些函数主要用于帮助数据库开发或运维人员更好地 对数据库进行维护工作。

测试:

SELECT VERSION(),CONNECTION_ID(),DATABASE(),
USER(),CHARSET('hello'),COLLATION('hello')
FROM DUAL

执行结果: 

7. 其他函数

MySQL中有些函数无法对其进行具体的分类,但是这些函数在MySQL的开发和运维过程中也是不容忽视的。

测试:FORMAT,如果n的值小于或者等于0,则只保留整数部分

fromat也是四舍五入的和round作用很相似;但是当是负数时,对于round会继续四舍五入,到那时format不会,当n的值小等于于0时,只保留整数部分!

SELECT FORMAT(123.125,2),FORMAT(123.125,-2),ROUND(123.125,-2)
FROM DUAL;

执行结果:

测试:ONV,实现进制之间的转换

SELECT CONV(16, 10, 2), CONV(8888,10,16), CONV(NULL, 10, 2)
FROM DUAL;

执行结果:

测试:INET_ATON、INET_NTOA

INET_ATON是将一个IP转换成一个数字,采用的算法是以“192.168.1.100”为例,计算方式为192乘以256的3次方,加上168乘以256的2次方,加上1乘以256,再加上100。INET_NTOA是将这个数字再转换成IP

SELECT INET_ATON('192.168.1.100'),INET_NTOA(3232235876)
FROM DUAL;

执行结果:

测试:ENCHMARK、用于测试表达式的执行效率

SELECT BENCHMARK(100000,MD5('mysql'))
FROM DUAL;

执行结果:

测试:CONVERT、可以实现字符集的转换

SELECT CHARSET('hello'),CHARSET(CONVERT('hello' USING 'gbk'))
FROM DUAL;

执行结果:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx配置浏览器缓存,页面展示更快一步

1.简介 缓存能够存储请求的响应结果&#xff0c;可以很方便的再次访问&#xff0c;使用缓存的优点是很明显的。 加速内容的访问&#xff0c;降低响应时间减少服务器的负载 Nginx不仅仅是一个web服务器&#xff0c;它也是一个web缓存服务器。通过Nginx缓存&#xff0c;我们对…

Java引用类型(强引用,软引用,弱引用,虚引用)

从Java SE2开始&#xff0c;就提供了四种类型的引用&#xff1a;强引用、软引用、弱引用和虚引用。Java中提供这四种引用类型主要有两个目的&#xff1a;第一是可以让程序员通过代码的方式决定某些对象的生命周期&#xff1b;第二是有利于JVM进行垃圾回收。 强引用&#xff08…

【Linux环境】Linux常用命令记录汇总

Linux常用命令记录汇总 一、传输命令二、打包命令三、创建文件夹或文件命令四、切换用户五、vim相关命令六、权限更改命令 一、传输命令 命令格式&#xff1a; rz 点击回车 sz 文件名 点击回车命令解释&#xff1a; rz&#xff08;receive Zmodem缩写&#xff09;上传文件&am…

淘宝时光机入口在哪里怎么打开回溯20年淘宝历史账单?

淘宝时光机入口在哪里怎么打开&#xff1f; 打开淘宝时光机入口&#xff1a;https://www.caochai.com/article-4208.html &#xff0c;开始回溯20年淘宝历史账单&#xff1b; 淘宝大额内部隐藏优惠券怎么领取&#xff1f; 1、打开淘宝优惠券查询领取入口&#xff1a;https://…

上班摸鱼逛博客,逮到一个字节8年测试开发,聊过之后羞愧难当......

老话说的好&#xff0c;这人呐&#xff0c;一旦在某个领域鲜有敌手了&#xff0c;就会闲得某疼。前几天我在上班摸鱼刷博客的时候认识了一位字节测试开发大佬&#xff0c;在字节工作了8年&#xff0c;因为本人天赋比较高&#xff0c;平时工作也兢兢业业&#xff0c;现在企业内有…

好家伙,一天约了6场面试,又被吊打了....

好兄弟一天约了6场面试&#xff0c;又被吊打了 面试感受 先说一个字 是真的 “ 累 ” 安排的太满的后果可能就是一天只吃一顿饭&#xff0c;一直奔波在路上 不扯这个了&#xff0c;给大家说说面试吧&#xff0c;我工作大概两年多的时间&#xff0c;大家可以参考下 在整个面试…

mysql 连表查询

文章目录 一、内连接二、外连接2.1 左外连接2.2 右外连接 三、总结 写在前面 在MySQL中join操作被称为连接&#xff0c;作用是能连接多个表的数据&#xff08;通过连接条件&#xff09;&#xff0c;从多个表中获取数据合并在一起作为结果集返回给客户端。即使用连接查询一条SQL…

Redis 主从 + 哨兵模式搭建

前言&#xff1a;以Linux环境为示例 一、整体架构&#xff08;1主 2从 3哨兵&#xff09; 二、redis 安装 1、安装路径&#xff1a;/usr/local/redis/redis-6382&#xff08;可自行指定&#xff09; 2、解压安装包&#xff1a; 直接解压&#xff1a;tar -axvf redis-5.0.…

国内可以使用的chatgpt站点,有多种工具可用

看到很多人在寻找国内可以使用的chatgpt站点&#xff0c;忍不住来给大家分享一波&#xff0c;这个相对而言还是挺好用的&#xff0c;不限制字数&#xff0c;每天都能白女票使用。看下面正文。 chatgpt的使用方法 在浏览器或者打开我的电脑&#xff0c;顶部车俞入 人工智能聊…

C++好难(5):内存管理

这一节学完&#xff0c;我们 C嘎嘎 就算是正式入门了&#xff0c;但是之后的课还会更上一阶d(ŐдŐ๑) 继续坚持&#xff01; 【本节目标】 1. C/C内存分布 2. C语言中动态内存管理方式 3. C中动态内存管理 4. operator new与operator delete函数 5. new和delete的实现原…

【在线OJ项目】项目环境与项目演示

目录 一、项目环境 二、项目展示 项目Gitee地址&#xff1a;online-oj: 在线OJ项目实现了核心模块&#xff0c;后续添加竞赛、考试等 (gitee.com)https://gitee.com/PG1886/online-oj 一、项目环境 采用SpringBootSpringMVCMybatis进行服务器开发 前端采用HTMLCSSJS&#…

mysql 5.7.32安装及主从安装信息

最方便的 就是 直接使用docker容器 搭建一个比较方便 或者 直接使用yum源安装&#xff0c;说白了就是少踩坑。 或者 是直接使用 宝塔等工具帮忙&#xff0c;直接脚本跑 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 以下是内网两台机器安装的方法 1&#xff1a; 下…

【数据结构】ArrayList与顺序表

目录 1.List接口 2.线性表 3.顺序表 3.1常用方法 3.2常用方法的实现 4.ArrayList 4.1构造方法 4.2遍历 4.3扩容 4.4CVTE面试题&#xff1a;删除相同字符 5.ArrayList的具体实现 5.1洗牌算法 5.2杨辉三角 6.ArrayList的优缺点 1.List接口 List 接口继承于 Collec…

3 天,入门 TAURI 并开发一个跨平台 ChatGPT 客户端

TAURI 是什么 TAURI 是一个使用 Rust 编写的程序框架&#xff0c;它允许我们使用 Web 技术和 Rust 语言构建跨端应用。它提供了大量特性&#xff0c;例如系统通知、网络请求、全局快捷键、本地文件处理等&#xff0c;它们都可以在前端通过 JavaScript 便捷的调用。 TAURI 应用…

《精英的傲慢:好的社会该如何定义成功》笔记与摘录

目录 作者简介 书内容简介 经典摘录 1、现状与现象 2、什么是优绩至上原则 3、对优绩至上原则赞同与否的讨论 4、 优绩至上原则存在的争议点 5、 作为哲学家&#xff0c;桑德尔从道德哲学角度的思考 6、作者对优绩制的批判 7、流动性与平等的关系 8、我们该如何摆脱优…

MyCat分片-垂直分库

文章目录 需求场景一、环境准备二、实现1.MyCat—schema.xml文件配置2.MyCat—server.xml文件配置3.MyCat启动4.MyCat登录5.创建表结构及数据导入 三、全局表配置全局表配置 此文档来源于网络,如有侵权&#xff0c;请联系删除&#xff01; 需求场景 在业务系统中&#xff0c;涉…

使用ChatGPT辅助学习——让你的学生主动找到学习的方法!

ChatGPT就像一座巨大的金矿&#xff0c;能挖到多少金子&#xff0c;完全取决于你的思维、认知和行动力。 当大部分人还在观望&#xff0c;或者拿着ChatGPT随便玩一玩的时候。 有的人&#xff0c;已经快速把它切入垂直领域&#xff0c;开始深耕。 如果你的孩子或者学生正在上初…

静态库和动态库的制作与使用

1.静态库的制作与使用 小知识&#xff1a;删除命令行&#xff0c;或者是配置好的路径之类的&#xff1a;退出编辑模式后&#xff1a;dd 保存并退出&#xff1a;退出编辑模式后&#xff0c;&#xff1a;wq (1)静态库的制作 1.首先生成你需要加入的文件的.O文件。使用如下代码 …

网络编程六--UDP服务器客户端

写在前面 UDP&#xff08;User Datagram Protocol&#xff09;称为用户数据报协议&#xff0c;是一种无连接的传输协议。 UDP的主要应用在即使丢失部分数据&#xff0c;也不影响整体效果的场景。例实时传输视频或音频时&#xff0c;即使丢失部分数据&#xff0c;也不会影响整…

C++11大杂烩

C11大杂烩 文章目录 C11大杂烩介绍语法统一的列表初始化&#xff1a;{}初始化initializer_list简化声明的方式autotypeid().name():获取类型名decltype nullptr范围for循环stl库中的一些变化arrayforward_list final和override右值引用和移动语义左值引用和右值引用 移动构造和…