【MySQL 保姆级教学】内置函数(9)

news2024/10/28 21:01:53

内置函数

  • 1. 日期函数
    • 1.1 日期函数的种类
    • 1.2 示例
    • 1.3 日期的转换
  • 2. 字符串函数
    • 2.1 种类
    • 2.2 示例
  • 3. 数学函数
    • 3.1 种类
    • 3.2 向上取整和向下取整
    • 3.3 示例
  • 4. 其他函数
    • 4.1 查询当前用户/数据库
    • 4.2 ifnull(val1,val2)
    • 4.3 md5()函数
    • 4.4 password()函数

1. 日期函数

1.1 日期函数的种类

函数名称说明
current_date()返回当前日期
current_time()返回当前时间
current_timestamp()返回时间戳(日期和时间)
now()返回当前时间
date(datetime)返回datetime参数的时间部分
date_add(date, interval d_value_type)在d_value_type值上添加时间或日期,interval后的单位可以是:year,day,minute,second
date_sub(date, interval d_value_type)在d_date_type值上添加时间或日期,interval后的单位可以是:year,day,minute,second
datediff(date1, date2)两个日期的差(date1-date2)

now()current_timestamp()的区别:

  • now()返回当前日期和时间,数据类型为 DATETIMEcurrent_timestamp()返回当前日期和时间,数据类型为 TIMESTAMP
  • now()返回的是服务器的本地时间;current_timestamp()返回的是服务器的本地时间,但在某些上下文中可能会自动转换为客户端的时区。

为什么需要 interval?

  1. 明确性:
    interval 参数明确了你要增减的时间单位和数量,使得函数的行为非常明确。例如,INTERVAL 1 DAY 表示增加一天,而 INTERVAL 2 HOUR 表示增加两个小时。
  2. 灵活性:
    通过使用 interval,你可以灵活地增减不同单位的时间。这包括天、小时、分钟、秒、月、年等。
  3. 可读性和维护性:
    使用 interval 使代码更具可读性和维护性。其他开发人员可以很容易地理解你在做什么,而不需要猜测。

1.2 示例

  1. 获取当前日期(年月日)
    命令:select current_date();
    在这里插入图片描述

  2. 获取当前时间
    命令:select current_time();
    在这里插入图片描述

  3. 获取当前日期和时间
    命令:select now();
    在这里插入图片描述

  4. 获取当前时间戳(日期和时间)
    命令:select current_timestamp();
    在这里插入图片描述

  5. 在日期的基础上加上时间
    命令:select date_add('2020-10-1', interval 10 day);
    在这里插入图片描述

  6. 在日期的基础上减去时间
    命令:select date_sub('2020-10-1', interval 10 day);
    在这里插入图片描述

  7. 两个时间相减,左-右,返回的单位是天
    命令:select datediff('2024-10-10', '2020-8-8');
    在这里插入图片描述

1.3 日期的转换

  1. 创建一个留言板
    命令:

    create table comment(
    id int primary key auto_increment,
    comment text,
    sendtime datetime
    );

    在这里插入图片描述

  2. 插入数据
    命令:

    insert into comment(comment, sendtime)
    values(‘放假啦’,now()),
    (‘一起出去玩吧’,now());

    在这里插入图片描述

    命令:insert into comment (comment, sendtime) values('好的,约个地点吧', current_date());
    在这里插入图片描述

    命令:insert into comment(comment, sendtime) values('去哪玩呢?', current_time());
    在这里插入图片描述

    命令:insert into comment(comment, sendtime) values('去游乐场吧', current_timestamp);
    在这里插入图片描述

  3. 查询在两分钟内发布的帖子
    命令:select comment from comment where date_add(sendtime, interval 2 minute) > now();

    或命令:select comment from comment where date_sub(now(), interval() 2 minute) < sendtime;
    在这里插入图片描述

同学们有没有发现,我们的comment表中comment字段设置的是datetime类型,而在插入的过程中有current_date()current_time()current_timestamp()
这样类型的数据差进去后还是datetime类型吗?

命令:select * from comment;
在这里插入图片描述

DATETIME 类型的列可以接受 CURRENT_DATE()、CURRENT_TIME() 和 CURRENT_TIMESTAMP() 函数返回的值,因为这些函数返回的值可以被隐式转换为 DATETIME 类型。以下是对每个函数的详细解释以及它们如何与 DATETIME 类型交互:

  1. current_date返回值是date日期,当将 CURRENT_DATE() 的值插入到 DATETIME 列时,数据库会自动将 DATE 值转换为 DATETIME 值,通常会将时间部分设置为 00:00:00
  2. current_time返回值是time时间,当将 CURRENT_TIME() 的值插入到 DATETIME 列时,数据库会自动将 TIME 值转换为 DATETIME 值,通常会将日期部分设置为current_date()的值
  3. current_timestamp()的返回值是时间戳(格式是datetime类型),当将 CURRENT_TIMESTAMP() 的值插入到 DATETIME 列时,数据库会直接使用返回的 TIMESTAMP 或 DATETIME 值

默认行为

  • 数据库系统通常会尽量避免数据丢失,因此它会尝试将不同类型的日期/时间数据转换为 DATE 类型,而不是直接拒绝插入。

具体的转换还是根据MySQL的版本。

为了表示数据的准确,可以使用date(time/datetime/timestamp)函数进行日期提取

2. 字符串函数

2.1 种类

函数名称说明
charset(str)返回字符串的字符集
collation(str)返回字符串的校验集
concat(string [,…])连接字符
instr(string, substring)返回substring在string中的位置
ucase(string)转换成大写
lcase(string)转换成小写
left(string, length)从string左边开始取length多个字符
right(string, length)从string右边开始取length多个字符
length(string)string的长度
replace(str, searth_str, replace_str)把str中的search_str替换成replace_str
strcmp(string1,string2)逐字比较字符串string1和string2的大小
substring(string, position [, length])从position开始取leng个字符,没有length则从position到末
ltrim(string)去掉string左边的空格
rtrim(string)去掉string右边的空格
trim(string)去掉string左右两边的空格

2.2 示例

  1. 获取t1表的id字段的字符集和校验集
    命令:select charset(id), collation(id) from t1;
    在这里插入图片描述

  2. concat()拼接字符串
    命令:select concat(name, '的分数是:',score) from t1;
    在这里插入图片描述
    如果拼接的字段有一行为空,则该行直接显示为空

  3. t1表中,姓名占用的字节数
    命令:select length(name) from t1;
    在这里插入图片描述
    length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数;
    如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数
    (与字符集编码有关);使用utf8时,一个汉字占3个字节;使用gbk时,一个汉字占2个字节

  4. 把t1b表姓名中的‘李’替换成‘li’
    命令:select replace(name, '李', 'li') from t1;
    在这里插入图片描述

  5. 截取姓名的第2到第三个字符(相当于下标从1开始)。
    substring(string, position, length):从position开始的length个字符(包含position)
    命令:select substring(name, 2,2) from t1;
    在这里插入图片描述
    如果字段从第二个字符开始不足两个字符,则取一个字符。

  6. 把t2表的name字段的x姓和名分开打印,姓转换为大写,名为小写
    命令:select ucase(substring(name, 1, 1)), lcase(substring(name, 2)) from t2;
    在这里插入图片描述

  7. instr(string, substring),返回substring在string中出现的位置
    命令:select instr('abcdefg', 'bc');
    命令:select instr(''abcdefg, 'abcd');
    在这里插入图片描述
    同学们可以发现,返回的是查询到substring首位置string下标从1开始

  8. 清空字符串的空格
    清空左边空格命令:select ltrim(' 你好 ! ');
    清空右边空格命令:select rtrim(‘ 你好 ! ’);
    清空两边空格命令:select trim(' 你好 ! ');
    字符串包含的空格清楚不了。
    在这里插入图片描述

3. 数学函数

3.1 种类

函数名称说明
abs(number)绝对值函数
bin(decimal_number)十进制转换成二进制
hex(decimal_number)十进制转换成十六进制
conv(number, from_number, to_number)进制转化
ceiling(number)向上取整
floor(number)向下取整
format(number,decimal_replace)格式化,保留小数位数
rand()返回随机浮点数,范围[0.0, 1.0)
mod(number,denominator)取模,求余
md5(str)生成32位的唯一标识符

3.2 向上取整和向下取整

向上取整 (Ceiling)

  • 定义:向上取整是指将一个浮点数转换为大于或等于该浮点数的最小整数
  • 符号:通常用 ceil 表示。
  • 数学表示:ceil(x) 返回不小于 x 的最小整数。

向下取整 (Floor)

  • 定义:向下取整是指将一个浮点数转换为小于或等于该浮点数的最大整数
  • 符号:通常用 floor 表示。
  • 数学表示:floor(x) 返回不大于 x 的最大整数。

在这里插入图片描述

使用t3表:
在这里插入图片描述

向上取整命令:select ceiling(score) from t3;
在这里插入图片描述

向下取整命令:select flooor(score) from t3;
在这里插入图片描述

3.3 示例

  1. 绝对值函数abs()
    命令:select abs(-111.11);
    在这里插入图片描述

  2. 保留两位小数,foemat(number, n), n是保留小数位的个数
    命令:select format(score, 2) from t3;
    在这里插入图片描述

  3. rand()产生随机数。
    产生0-99的随机数:select rand()*100;
    在这里插入图片描述

    产生0-999的随机数:select rand()*1000;
    在这里插入图片描述

  4. 十进制转换为二进制
    命令:select bin(64);
    在这里插入图片描述

  5. 十进制转化为十六进制
    命令:select hex(64);
    在这里插入图片描述

  6. 取模,求余
    命令:select mod(100,3);
    在这里插入图片描述

4. 其他函数

4.1 查询当前用户/数据库

  1. 查询当前用户
    命令:seelct user()
    在这里插入图片描述
  2. 查询当前数据库
    命令:select database();
    在这里插入图片描述

4.2 ifnull(val1,val2)

ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值
示例:

  1. 命令:select ifnull(null,'为空');

在这里插入图片描述

  1. 查询t2表的姓名,如果姓名为空,则替换为’未输入名字’
    命令:select ifnull(name, '未输入名字') from t1;
    在这里插入图片描述

4.3 md5()函数

MySQL 中,MD5 哈希函数主要用于生成数据的哈希值。虽然 MD5 在密码存储和高安全性要求的应用中已经不被推荐使用,但在某些情况下,它仍然可以用于数据完整性验证、简单的数据加密或生成唯一标识符等场景。

MD5 在 MySQL 中的作用

  • 数据完整性验证:
    通过计算数据的 MD5 哈希值,可以验证数据在传输过程中是否被篡改。
    例如,在文件上传或下载时,可以通过比较文件的 MD5 值来确保文件的完整性。
  • 简单的密码存储:
    尽管不推荐,但在一些旧系统中,MD5 仍然用于存储用户密码的哈希值。
    现代系统应使用更强的哈希算法(如 SHA-256 或 bcrypt)并结合盐(salt)来存储密码。
  • 生成唯一标识符:
    可以使用 MD5 生成数据的唯一标识符,例如在生成 URL 缩短服务中的短链接时。
  • 数据去重:
    通过计算数据的 MD5 哈希值,可以快速检测和删除重复的数据记录。

示例:

  1. 把字符串生成哈希值
    命令:select md5('abcdefg');
    在这里插入图片描述

  2. 这是一个把密码加密的场景。password()函数的加密程度更高。
    md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串

    创建表t4,命令:

    create table t4(
    id char(11) primary key ,
    password char(32) - - MD5摘要后是32位的字符串
    );

    在这里插入图片描述

    插入MD5数据,命令:

    insert into t4
    values(‘111’, md5(‘111’)),
    (‘222’,md5(‘222’)),
    (‘333’, md5(‘333’));

    在这里插入图片描述
    查看全部数据
    在这里插入图片描述

    where查询
    命令:select id, password from t4 where id='111'and password=md5('111');
    在这里插入图片描述

4.4 password()函数

在 MySQL 中,PASSWORD() 函数用于计算和返回一个字符串的哈希值,这个哈希值是 MySQL 用于存储用户密码的格式。PASSWORD() 函数生成的哈希值是一个 41 字符的字符串,通常用于 MySQL 用户认证。

PASSWORD() 函数的作用

  1. 生成密码哈希:
    • PASSWORD() 函数接受一个字符串作为输入,并返回该字符串的哈希值。这个哈希值是使用 MySQL 内部的算法生成的。
    • 生成的哈希值是一个 41 字符的字符串,格式为 *<hash_value>,其中 <hash_value> 是实际的哈希值。
  2. 用户认证:
    • 在 MySQL 中,用户的密码通常是通过 PASSWORD() 函数进行哈希处理后存储在 mysql.user 表中的 password 列中。
    • 当用户尝试登录时,MySQL 会将用户提供的密码通过 PASSWORD() 函数进行哈希处理,并与存储在 mysql.user 表中的哈希值进行比较,以验证用户的身份。

示例:

  1. 命令:select password('111');
    在这里插入图片描述

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

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

相关文章

Python | Leetcode Python题解之第514题自由之路

题目&#xff1a; 题解&#xff1a; Test "godding" target "d"i 0left i lc 0 right i rc 0while Test[left] ! target:left - 1lc 1if left -1:left len(Test) - 1while Test[right] ! target:right 1rc 1if right len(Test):right 0prin…

我用自研引擎做游戏:《干得好,托尼》

最近心里突然有个想法&#xff0c;想做一个游戏试试看。但是我从未做过游戏&#xff0c;这可咋办&#xff1f;我理性的思考了片刻&#xff0c;清楚的意识到&#xff0c;我要习得做游戏的方法论。于是到网上找了几本开发游戏的电子书&#xff0c;看了几天&#xff0c;就开始进入…

滚珠花键精密结构如何驱动旋转运动?

滚珠花键作为一种机械传动装置&#xff0c;具有升降旋转机构的功能&#xff0c;被广泛应用于各种机器设备中。那么&#xff0c;大家知道滚珠花键是如何实现旋转运动的吗&#xff1f; 滚珠花键实现旋转运动的工作原理可以概括为滚动摩擦和轴向移动与径向传动这两点&#xff0c;当…

TMGM平台可靠么?交易是否安全?

在选择外汇交易平台时&#xff0c;安全性与可靠性是投资者最关注的要素之一。作为全球知名的外汇及差价合约交易平台&#xff0c;TMGM&#xff08;tmgm-pt.com&#xff09;的安全性与可靠性可以从多个方面进行评估&#xff0c;包括监管环境、资金安全、客户服务、交易技术与服务…

Javascript数据结构——哈希表

18_哈希表_深入链地址法_哔哩哔哩_bilibili Java [ 基础 ] HashMap详解 ✨_java hashmap-CSDN博客 哈希表&#xff08;Hash Table&#xff09;&#xff0c;又称为散列表&#xff0c;是一种通过哈希函数组织数据以实现快速访问的数据结构。下面将从其概述、底层实现和前端应用…

【题解】【分治】——黑白棋子的移动

【题解】【递归】——黑白棋子的移动 黑白棋子的移动题目描述输入格式输出格式输入输出样例输入 #1输出 #1 提示 1.题意解析2.AC代码 黑白棋子的移动 通往洛谷的传送门 题目描述 有 2 n 2n 2n 个棋子排成一行&#xff0c;开始为位置白子全部在左边&#xff0c;黑子全部在右…

2024 前端面试题!!! html css js相关

常见的块元素、行内元素以及行内块元素&#xff0c;三者有何不同&#xff1f;​​​​​​​ HTML、XML、XHTML它们之间有什么区别&#xff1f;​​​​​​​ DOCTYPE(⽂档类型) 的作⽤ Doctype是HTML5的文档声明&#xff0c;通过它可以告诉浏览器&#xff0c;使用哪一个HTM…

Vue学习笔记(八)

透传attribute "透传attribute"指的是传递给一个组件&#xff0c;却没有被改组件声明为props或emits的attribute或者v-on事件监听器。最常见的例子就是class、style和id。 当一个组件以单个元素为根作渲染时&#xff0c;透传的attribute会自动被添加到根元素上。 …

WSGI、uwsgi与uWSGI

WSGI、uwsgi与uWSGI WSGI (web server gateway interface 网络服务网关接口) 只能用于python&#xff0c;是一个接口标准协议&#xff0c;django、flask自带有uwsgi 是WSGI的通信协议uWSGI是实现了uwsgi协议和WSGI服务的web服务器 他们是为了将web服务器与web框架连接起来 N…

《MYSQL 实战45讲》深入浅出ORDER BY底层

慢查询日志这个路径下&#xff0c;但是打不开 内存临时表 现在有一个业务功能是从一个单词表里面随机选出3个单词出来 这个表有10000条数据。 select word from words order by rank() limit 3 使用执行计划查看结果&#xff1a; select_type是SIMPLE表示改查询不包含子查询…

USB Type-C 受电端取电快充协议芯片,支持PD+QC+FCP+SCP+AFC快充协议

前言 随着科技的飞速发展&#xff0c;电子设备对于快速充电的需求日益增加。为了满足这一需求&#xff0c;市场上涌现出了众多快充技术和产品。其中&#xff0c;XSP08Q诱骗取电芯片以其卓越的性能和广泛的应用场景&#xff0c;成为了快充领域的一颗璀璨明星。本文将对XSP08Q P…

边缘计算网关在储能领域的应用-天拓四方

随着全球能源结构的转型和智能电网的快速发展&#xff0c;储能技术已成为推动能源革命的关键技术之一。在储能系统中&#xff0c;边缘计算网关作为一种新型的网络设备&#xff0c;发挥着至关重要的作用。 一、边缘计算网关在储能领域的应用 1、实时监控与控制 储能系统是一个…

hf_transformers-Quantization

bitsandbytes BitSandbytes 是将模型量化为 8 位和 4 位的最简单选项。8 位量化将 FP16 中的异常值与 INT8 中的非异常值相乘&#xff0c;将非异常值转换回 FP16&#xff0c;然后将它们相加以返回 FP16 中的权重。这减少了离群值对模型性能的降级影响。4 位量化进一步压缩模型…

【小白学机器学习22】 多变量分析:相关性分析,多变量回归,最小二乘法 ols等

目录 1 概念名词&#xff1a; 1.1 双变量分析与单因素分析 1.2 变化 1.3 共变 和 相关分析 Correlation analysis 1.4 回归分析 Regression analysis 1.5 相干和相关 1.5.1 相干relevant 1.5.2 相关Correlation 2 双变量分析 3 相关分析 3.1 是否相关 3.2 相关的…

Ping32为何是理想的加密工具?十大核心功能保障您的数据安全

在当今数字化时代&#xff0c;数据安全已成为企业和个人面临的重大挑战。随着信息泄露事件的频繁发生&#xff0c;选择一款可靠的加密工具至关重要。Ping32 作为一款备受赞誉的加密软件&#xff0c;以其十大核心功能&#xff0c;成为保障数据安全的理想选择。 一、强大的加密算…

React第十一章(useReducer)

useReducer useReducer是React提供的一个高级Hook,没有它我们也可以正常开发&#xff0c;但是useReducer可以使我们的代码具有更好的可读性&#xff0c;可维护性。 useReducer 跟 useState 一样的都是帮我们管理组件的状态的&#xff0c;但是呢与useState不同的是 useReducer…

JsonCpp库学习记录

使用源码的方式 到JsonCpp的开源库仓库下载最新的发行版本 解压压缩包 使用Python生成源码文件 在本路径下cmd打开控制台&#xff0c;使用python编译&#xff08;前提是python环境已安装&#xff09; python amalgamate.py 生成dist文件夹 jsoncpp为整合在一起的源码&#…

vue 解决:npm ERR! code ERESOLVE 及 npm ERR! ERESOLVE could not resolve 的方案

1、问题描述&#xff1a; 其一、需求为&#xff1a; 想要安装项目所需依赖&#xff0c;成功运行 vue 项目&#xff0c;想要在浏览器中能成功访问项目地址 其二、问题描述为&#xff1a; 在 package.json 文件打开终端平台&#xff0c;通过执行 npm install 命令&#xff0c…

6,000 个网站上的假 WordPress 插件提示用户安装恶意软件

黑客使用窃取的凭证感染 WordPress 网站&#xff0c;并向其发送虚假插件&#xff0c;通过虚假的浏览器更新提示向最终用户发送恶意软件和信息窃取程序。 该恶意活动基于ClickFix假浏览器更新恶意软件的新变种&#xff0c;自 2024 年 6 月以来已使用假 WordPress 插件感染了超过…

QT 机器视觉 1.相机类型

本专栏从实际需求场景出发详细还原、分别介绍大型工业化场景、专业实验室场景、自动化生产线场景、各种视觉检测物体场景介绍本专栏应用场景 更适合涉及到视觉相关工作者、包括但不限于一线操作人员、现场实施人员、项目相关维护人员&#xff0c;希望了解2D、3D相机视觉相关操作…