MYSQL学习笔记(五):单行函数(字符串、数学、日期时间、条件判断、信息、加密、进制转换函数)讲解
前言:
- 学习和使用数据库可以说是程序员必须具备能力,这里将更新关于MYSQL的使用讲解,大概应该会更新30篇+,涵盖入门、进阶、高级(一些原理分析);
- 这一篇是讲解单行函数,当然mysql函数很多哈,只有多用才能记得住;
- 这些函数,如果不用,记得再牢都会忘记(我是这样的),但是可以先看一下,动手打一下,会现用现查即可,而且现在AI这么发达不是么;
- 虽然MYSQL命令很多,但是自己去多敲一点,到后面忘记了,查一下就可以回忆起来使用了;
- 这一系列也是本人学习MYSQL做的笔记,也是为了方便后面忘记查询;
- 参考资料:尚硅谷、黑马、csdn和知乎博客;
- 欢迎收藏 + 关注,本人将会持续更新。
文章目录
- 单行函数
- 字符串函数
- 数学函数
- 日期和时间函数
- 条件判断函数
- 系统信息函数
- 加密函数
- 进制转换
- 2.IP地址转换
课程使用数据文件: 后台私信获取。
单行函数
MySQL 函数会对传递进来的参数进行处理,并返回一个处理结果,也就是返回一个值。
MySQL 包含了大量并且丰富的函数,这里只讲解一部分,剩下的比较罕见的函数我们可以到「MySQL 参考手册」查询。
字符串函数
| 函数 | 作用 |
|---|---|
| UPPER(列|字符串) | 将字符串每个字符转为大写 |
| LOWER(列|字符串) | 将字符串每个字符转为小写 |
| CONCAT(str1,str2,…) | 将所有字符串连接成一个字符串 |
| REPLACE(列|字符串,新字符串) | 使用新字符串替换旧字符串 |
| LENGTH(列|字符串) | 求字符串长度 |
| SUBSTR(列|字符串,开始点[,长度]) | 字符串截取(字符串,开始点) |
| LEFT(str,len) | 获取字符串左边len个字符组成的字符串 |
| RIGHT(str,len) | 获取字符串右边len个字符组成的字符串 |
| MID(str,pos,len) | 获取字符串中从pos(第几个)位置开始,长度为len的字符串 |
| ASCII(字符) | 返回与指定字符对应的十进制整数 |
| CHR(数字) | 返回与整数对应的字符 |
| RPAD(列|字符串,长度,填充字符) LPAD(列|字符串,长度,填充字符) | 用指定的字符在字符串右或左填充 |
| LTRIM(字符串)、RTRIM(字符串) | 去掉字符串左或右的空格 |
| TRIM(列|字符串) | 去掉字符串左右空格 |
| INSTR(列|字符串,要查找的字符串,开始位置,出现位置) | 查找一个子字符串是否在指定的位置上出现 |
- 把员工姓名首字母大写,其他字母小写
mysql> select concat(upper(left(ename, 1)), lower(substr(ename, 2))) from emp;
+--------------------------------------------------------+
| concat(upper(left(ename, 1)), lower(substr(ename, 2))) |
+--------------------------------------------------------+
| Yxz |
| Smith |
| Allen |
| Ward |
| Jones |
| Martin |
| Blake |
| Clark |
| Scott |
| King |
| Turner |
| Adams |
| James |
| Ford |
| Miller |
+--------------------------------------------------------+
15 rows in set (0.00 sec)
- 查询出姓名长度是5的所有员工信息
mysql> select * from emp e where length(e.ename)=5;
+-------+-------+----------+------+------------+------+------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+-------+-------+----------+------+------------+------+------+--------+
| 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800 | NULL | 20 |
| 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600 | 300 | 30 |
| 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975 | NULL | 20 |
| 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850 | NULL | 30 |
| 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450 | NULL | 10 |
| 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000 | NULL | 20 |
| 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100 | NULL | 20 |
| 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950 | NULL | 30 |
+-------+-------+----------+------+------------+------+------+--------+
8 rows in set (0.00 sec)
- 查询出员工姓名前三个字母是‘JAM’的员工
mysql> select * from emp e where substr(e.ename, 1, 3)='JAM';
+-------+-------+-------+------+------------+------+------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+-------+-------+-------+------+------------+------+------+--------+
| 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950 | NULL | 30 |
+-------+-------+-------+------+------------+------+------+--------+
1 row in set (0.00 sec)
- 查询所有员工姓名的前三个字母
mysql> select substr(ename, 3) from emp;
+------------------+
| substr(ename, 3) |
+------------------+
| z |
| ITH |
| LEN |
| RD |
| NES |
| RTIN |
| AKE |
| ARK |
| OTT |
| NG |
| RNER |
| AMS |
| MES |
| RD |
| LLER |
+------------------+
15 rows in set (0.00 sec)
数学函数
| 函数 | 作用 |
|---|---|
| ROUND(数字[,保留位数]) | 根据指定的保留位数对小数进行四舍五入,如果不指定保留位数,则小数点之后的数字全部进行全部四舍五入 |
| TRUNCATE(数字[,截取位数]) | 保留指定位数的小数,如果不指定,则表示不保留 |
| CEIL(数字),CEILING(数字) | 对小数向上取整 |
| FLOOR(数字) | 对小数向下取整 |
| RAND([n]) | 随机返回0到1.0之间的小数,如果指定n每次产生的就都是重复的 |
通过数据库的函数,生成一个六位数字的随机验证码。
SELECT LPAD(TRUNCATE(RAND()*1000000,0),6,'0');# 随机生产,如果少于6位,则用0填充
mysql> select lpad(truncate(rand()*1000000, 0), 6, '0');
+-------------------------------------------+
| lpad(truncate(rand()*1000000, 0), 6, '0') |
+-------------------------------------------+
| 870583 |
+-------------------------------------------+
1 row in set (0.00 sec)
日期和时间函数
| 函数 | 作用 |
|---|---|
| CURDATE(),CURRENT_DATE() | 返回当前日期 |
| CURTIME(),CURRENT_TIME() | 返回当前时间 |
| NOW(),CURRENT_TIMESTAMP(),LOCALTIME(), SYSDATE(),LOCALTIMESTAMP() | 返回会当前日期和事件 |
| YEAR(日期) | 返回日期中的年份 |
| MONTH(日期) | 返回日期中的月份[1,12] |
| DAY(日期) | 返回日期中的天[1,31] |
| HOUR(时间) | 返回时间中的小时 |
| MINUTE(时间) | 返回实践中的分钟 |
| SECOND(时间) | 返回时间中的秒 |
| DAYOFWEEK(日期) | 返回星期几,1星期日,2星期一 |
| WEEKDAY(日期) | 返回星期几,0星期一,1星期二 |
| DAYOFYEAR(日期) | 计算指定日期是本年第几天 |
| DAYOFMONTH(日期) | 计算指定日期是本月第几天 |
| QUARTER(日期) | 计算指定日期是第几季度 |
| TIME_TO_SEC(time) | 将指定时间转换为秒 |
| SEC_TO_TIME(sec) | 将以秒为单位的时间转换为时分秒的格式 |
| DATEDIFF(d1,d2) | 计算两个日期相隔的天数 |
| ADDDATE(date,n) | 计算指定日期加上n天后的日期 |
| SUBDATE(date,n) | 计算指定日期减去n天后的日期 |
| ADDTIME(time,n) | 计算指定时间加上n秒后的时间 |
| SUBTIME(time,n) | 计算指定时间减去n秒后的时间 |
| DATE_FORMAT(date,f) | 按格式返回日期 |
| TIME_FORMAT(time,f) | 按格式返回时间 |
条件判断函数
| 函数 | 作用 |
|---|---|
| IF(expr,v1,v2) | 如果表达式expr成立,返回结果v1;否则,返回结果v2。 |
| IFNULL(v1,v2) | 如果v1的值不为NULL,则返回v1,否则返回v2 |
| CASE | 分支(详见下面) |
IF(expr,v1,v2)
SELECT IF(1>0,'true','false');
->true
IFNULL(v1,v2)
SELECT IFNULL(NULL,'wy');
->wy
-
CASE语法1:
CASEWHEN expr1 THEN V1WHEN expr2 THEN V2...ELSE vn
END
SELECT CASE WHEN 1 > 0THEN '1 > 0'WHEN 2 > 0THEN '2 > 0'ELSE '3 > 0'END
->1 > 0
语法2:
CASE expr WHEN e1 THEN v1WHEN e1 THEN v1...ELSE vn
END
SELECT CASE 1 WHEN 1 THEN '我是1'WHEN 2 THEN '我是2'
ELSE '你是谁'
系统信息函数
系统信息函数用来查询MySQL数据库的系统信息。
| 函数 | 作用 |
|---|---|
| VERSION() | 返回数据库的版本号 |
| CONNECTION_ID() | 返回服务器的连接数 |
| DATABASE()、SCHEMA | 返回当前数据库名 |
| USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER()、CURRENT_USER | 返回当前用户 |
| CHARSET(str) | 返回字符串str的字符集 |
| COLLATION(str) | 返回字符串str的字符排列方式 |
加密函数
加密函数是MySQL用来对数据进行加密的函数.
| 函数 | 作用 |
|---|---|
| MD5(str) | 对字符串str进行散列,可以用于一些普通的不需要解密的数据加密,如密码 |
| sha1 | 对字符串str进行散列,可以用于一些普通的不需要解密的数据加密,如密码,比MD5更安全 |
进制转换
| 函数 | 作用 |
|---|---|
| BIN(x) | 返回x的二进制 |
| HEX(x) | 返回x的十六进制 |
| OCT(x) | 返回x的八进制 |
| CONV(x,from_base,to_base) | 将from_base进制的x,转成to_base进制 |
SELECT BIN(10),HEX(10),OCT(10),CONV(16,16,10);
->1010 A 12 22
2.IP地址转换
| 函数 | 作用 |
|---|---|
| INET_ATON(IP) | 将点分十进制的IP地址转为数字 |
| INET_NTOA(number) | 将数字形式的IP转为点分十进制 |
SELECT INET_ATON('192.168.0.1')->3232235521
SELECT INET_NTOA(3232235521)->192.168.0.1
相关文章:
MYSQL学习笔记(五):单行函数(字符串、数学、日期时间、条件判断、信息、加密、进制转换函数)讲解
前言: 学习和使用数据库可以说是程序员必须具备能力,这里将更新关于MYSQL的使用讲解,大概应该会更新30篇,涵盖入门、进阶、高级(一些原理分析);这一篇是讲解单行函数,当然mysql函数很多哈,只有多用才能记得…...
Grafana系列之Dashboard:新增仪表板、新增变量、过滤变量、变量查询、导入仪表板、变量联动、Grafana Alert
概述 关于Prometheus和Grafana的安装,略过。 写在前面 Dashboard:仪表板,可包含多个PanelPanel:面板,Dashboard中的组件 如有写得不对的地方,烦请指出。 新增仪表板 点击右上角的 选择New dashboard…...
(java版本)基于Misty1算法的加密软件的实现-毕业设计
一、基于Misty1算法的加密软件(Java)的实现 随着计算机网络及通信技术的飞速发展,信息安全成了信息社会急需解决的最重要的问题之一,密码技术是保证信息安全的核心技术。本文用JAVA语言开发了一个基于Misty1算法的加密软件&#x…...
Spring注解篇:@RestController详解
全文目录: 开篇语前言摘要概述源码解析使用案例分享代码分析使用场景优缺点分析测试用例 应用场景案例优缺点分析核心类方法介绍测试用例测试用例分析使用场景优缺点分析测试用例 小结总结文末 开篇语 哈喽,各位小伙伴们,你们好呀,…...
C++:将字符数组rkpryyrag,每个字母转换为其前面第13个字母后输出,如果超过a则从z再继续接着数。例如:b前面第1个字母是a。a前面第3个字母是x。
代码如下: #include <iostream> #include <string> using namespace std;int main(){string str "rkpryyrag";for (int i 0; i < str.length(); i){if (str[i] > a && str[i] < z){if (str[i] - a < 13){cout <<…...
《探秘鸿蒙Next:人工智能助力元宇宙高效渲染新征程》
在元宇宙的宏大愿景中,高效的渲染技术是构建沉浸式虚拟世界的关键。鸿蒙Next凭借与人工智能的深度融合,为元宇宙的渲染带来了全新的解决方案和无限可能。 智能场景分析与优化 人工智能能够对元宇宙场景进行智能分析。鸿蒙Next可以利用AI技术对场景中的…...
微前端qiankun的部署
微前端qiankun的部署 本地开发主应用配置启动端口子应用配置启动端口测试环境部署:场景 1:主应用和微应用部署到同一个服务器(同一个 IP 和端口)微应用都放在在一个特殊名称(不会和微应用重名)的文件夹下主应用配置子应用配置配置nginx本地开发 主应用配置启动端口 打开…...
HTML表格-掌握表格标签与属性
HTML表格是网页设计中用于展示数据的强大工具,它通过一系列标签和属性来控制表格的布局和样式。 一、HTML表格的基本结构 HTML表格由<table>标签定义,内部包含多个行(<tr>)、单元格(<td>或<th&…...
PID控制的优势与LabVIEW应用
PID控制(比例-积分-微分控制)已在工业控制领域得到广泛应用,尤其在实时控制和自动化系统中,其核心优点是简单、稳定且高效。尽管许多现代控制方法(如自适应控制、模型预测控制等)逐渐崭露头角,P…...
全球化趋势与中资企业出海背景
1. 全球化趋势与中资企业出海背景 1.1 全球经济格局变化 全球经济格局正经历深刻变革,新兴经济体崛起,全球产业链重塑,中资企业出海面临新机遇与挑战。据世界银行数据,新兴市场和发展中经济体在全球 GDP 中占比已超 40%ÿ…...
Oracle之RMAN备份异机恢复(单机到单机)
Oracle之RMAN备份异机恢复(单机到单机) 一、环境说明二、正式库进行RMAN备份三、将正式库备份与参数文件拷贝到测试库四、测试库异机恢复五、验证数据 一、环境说明 系统版本主机名DB版本DB名实例名Public-IP正式库Redhat9.5lemonEnterprise 19.25lemon…...
Servlet快速入门
Servlet 由于目前主流使用SpringBoot进行开发Servlet可以说是时代的眼泪,这篇文章主要介绍我基于SpringBoot对应Servlet的浅薄认知,有利于更好的理解前端界面和java服务器的数据交换过程 快速入门 我比较推荐这篇文章来对Servlet有一个大概的了解 都2…...
深入解析 Linux 内核中的 InfiniBand 驱动接口:ib_verbs.h
InfiniBand(IB)是一种高性能、低延迟的网络互连技术,广泛应用于高性能计算(HPC)、数据中心和云计算等领域。Linux 内核通过 InfiniBand 子系统提供了对 IB 设备的支持,而 ib_verbs.h 是 InfiniBand 驱动开发中的核心头文件之一。它定义了 IB 核心框架与用户空间接口(ver…...
vulnhub靶场【kioptrix-1靶机】
前言 靶机:kioptrix-1,IP地址为192.168.1.104 攻击:kali,IP地址为192.168.1.16 都采用虚拟机,网卡为桥接模式 文章中涉及的靶机,来源于vulnhub官网,想要下载,可自行访问官网下载&…...
Linux 6.14 内核的主要特性
原文参考:https://www.kernel.org/ Linux 6.14 内核是 Linux 内核的一个重要版本,预计于 2025 年 3 月发布。该版本引入了多项新特性和改进,涵盖了硬件支持、性能优化、安全性增强以及新技术的整合。 1. Rust 语言驱动的正式支持 Linux 6.1…...
【Linux】深刻理解动静态库
1.什么是库 库是写好的现有的,成熟的,可以复⽤的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个⼈的代码都从零开始,因此库的存在意义⾮同寻常。本质上来说库是⼀种可执⾏代码的⼆进制形式,可以被操作系统载…...
亚博microros小车-原生ubuntu支持系列:8-脸部检测与人脸特效
前面的都是使用了mediapipe框架。后面的这两节采用了opencv\dlib的框架。 一 脸部检测 核心:opencv detectMultiScale函数 detectMultiScale(image, scaleFactor, minNeighbors, flags, minSize, maxSize) image--待检测图片,一般为灰度图像加快检测…...
代码随想录算法训练营day32
代码随想录算法训练营 —day32 文章目录 代码随想录算法训练营前言一、动态规划理论基础二、509. 斐波那契数动态规划动态规划优化空间版递归法 三、70. 爬楼梯动态规划动态规划空间优化 746. 使用最小花费爬楼梯动态规划空间优化 总结 前言 今天是算法营的第32天,…...
缓存之美:万文详解 Caffeine 实现原理(下)
上篇文章:缓存之美:万文详解 Caffeine 实现原理(上) getIfPresent 现在我们对 put 方法有了基本了解,现在我们继续深入 getIfPresent 方法: public class TestReadSourceCode {Testpublic void doRead() …...
中企出海:从国际投资建厂:投前投中投后重点事项
1. 投前重点事项 1.1 市场调研与分析 在国际投资建厂的投前阶段,市场调研与分析是至关重要的基础工作,它能够帮助企业全面了解目标市场,为后续决策提供有力依据。 市场规模与潜力:通过收集和分析目标国家或地区的经济数据、行业…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
