初识muysql之常见函数

news2024/11/25 11:43:18

目录

一、日期时间函数

1. 常见的日期时间函数

2. current_date()

3. current_time()

4. current_timestamp()

5. now()

6. date(datetime)

7. date_add(date, interval d_value_type)

8. date_sub(date, d_value_type)

9. datediff(date1, date2)

10. 题目示例

10.1 创建一张生日表,记录生日

10.2 创建一个留言表

10.3 请查找前两分钟内发布的帖子

二、字符串函数

1. 常见字符串函数

2. charset(str)

3. concat(string2 [, ...])

4. instr(string, substring)

5. ucase(string)

6. lcase(string)

5. left(string, length)

6. length(string) 

7. replace(str, search_str, replace_str)

8. strcmp(string1, string2)

9. substring(str, position, [, length])

10. ltrim(string)、rtrim(string)和trim(string)

11. 题目案例

11.1 获取emp表的ename列的字符集

11.2 显示exam_result表中的信息,显示格式为“学生姓名:xxx,语文成绩:xxx,数学成绩:xxx,英语成绩xxx”

11.3 查询exam_result表中的学生姓名占用的字节数

11.4 显示时将emp表中的所有名字中的S替换为“上海”

11.5 截取emp表中的ename中的第二个到第三个字符

11.6 以首字符小写的方式显示emp表中所有员工的姓名 

三、数学函数

1. bin(decimal_namber)

2. conv(number, from_base, to_base)

3. format(number, decimal_places)

4. rand()

5. ceiling(number)j和floor(number)

四、其他函数

1. user()

2. database() 

3. md5()与password()

4. ifnull(val1, val2)


一、日期时间函数

1. 常见的日期时间函数

在以前的文章中提到过,mysql中是存在函数的,这些函数在我们查找数据、创建表等情况时都可能用到。在这篇文章中就简单的介绍一下mysql中的一些常见函数。

首先是日期函数,在看日期函数之间,我们要先建立一个观念,在mysql中,日期指的是年月日,而时间指的是时分秒。常见的日期函数如下图所示:

要知道,在数据库中,日期时间是很重要的,因此,上图的这些函数大家也都需要了解一下。这里就简单的介绍一下。

注意,在mysql中的很多函数都是需要搭配select语句使用的,下面的函数示范也是如此。

2. current_date()

current_date()函数是用于获取当前日期的。

3. current_time()

current_time()函数是用于获取当前时间的。

4. current_timestamp()

current_timestamp()函数是用于获取时间戳的。大家知道,时间戳是一串数字,但是在mysql中获取时间戳时,它并不是直接显示对应的数字,而是显示时间戳转换后形成的日期时间

简单来讲,就是当前的日期时间。

5. now()

now()函数是返回当前的日期时间,其实和current_timestamp()返回的内容是一模一样的。

6. date(datetime)

date(datetime)函数会将传入的datetime参数做切割,返回其中的日期部分

datetime可以是一个日期时间

也可以是一个函数,例如now()或者datestamp():

7. date_add(date, interval d_value_type)

date_add(date, interval d_value_type)函数可以用于增加date中的日期或时间interval是一个必须写的关键字,后面的d_value_type就是要添加的数值单位,可以是“year、minute、second、day”

同样的,既可以自己写日期:

也可以用其他如now、current_date等函数:

8. date_sub(date, d_value_type)

date_sub(date, d_value_type)是用于减去date中的日期时间的。作用和date_sub相反,参数的含义都是一样的,就不再过多赘述。

9. datediff(date1, date2)

datediff(date1, date2)函数用于获取date1和date2之间的日期差,单位是天

传入的参数也可以是函数,这里就不再演示。

10. 题目示例

为了让大家更好的理解这几个函数的使用,在这里就用几个题目来示范一下。

10.1 创建一张生日表,记录生日

先创建如下一张生日表:

一般来讲,我们的生日都是记录到年月日的。因此,在这个表里面的birthday列就是用的date数据类型。

此时就可以插入数据了:

无论是自己写,还是函数都是可以插入的。

虽然birthday列的数据类型是date,但是如果我们给它插入一些带有时间的函数,例如current_time、current_timestamp()呢?它能否插入?如果能插入结果又是什么呢?测试一下:

可以看到,它也能插入,但是插入的就是当前日期。对于这类情况,大家可以认为这些函数在获取结果时,其实是将日期和时间都拿到了,但是只根据需求显示特定的部分。而birthday的数据类型为date,因此就将得到的结果中的日期截取出来了。

因此,在这个题目中,如果你想用带有时间的函数,就可以用date将它括起来,告诉对方这里要的就只是日期:

因此,如果我们手动输入一个时间,就无法插入了:

10.2 创建一个留言表

在留言表中,我们要能够标识每条留言,这些留言也需要有一个时间来记录发表时间。一般来讲,留言的记录时间是按照年月日时分秒来记录的。

创建如下一个msg表:

由于需要记录时分秒,所以这里用的就是datetime类型。

此时就可以正常插入数据了:

当然,如果我们在查看的的时候只想看到日期,不想看时间,就可以手动给其指定要查看的内容:

10.3 请查找前两分钟内发布的帖子

为了看到两分钟发布的帖子,我们先来想想如何判断帖子是前两分钟内发布的帖子,很简单,就是用当前时间减去帖子的发布时间即可。此时就可以用上文中将的date_sub()函数。

为了方便看到实际场景,我们先插入一条信息,然后马上查找,以复现查找前两分钟内发布的帖子。

可以看到,此时就可以查找到前两分钟内发布的帖子了。

二、字符串函数

 1. 常见字符串函数

在mysql中,有很多函数都可以用来处理字符串,下图中就是一些常见的可以用于处理字符串的函数。在这里简单介绍一下:

注意,这些函数是否会修改数据库内的内容取决于你使用什么语句。例如如果你是在select语句中使用,就只是修改显示时的数据,而不会修改数据库内的数据;但如果你是用update语句,它就可能会修改数据库内的内容

2. charset(str)

charset(str)函数用于返回字符串字符集。参数str就是对应的字符

3. concat(string2 [, ...])

concat(string2 [, ...]函数可以将所有的参数拼接起来。参数部分就是要拼接的字符串。

4. instr(string, substring)

 instr(string, substring)函数是用来查看string中是否出现substring的,如果存在,就返回起始下标;如果不存在,就返回0。

注意,mysql中的字符串起始位置和C\C++的不同,它的起始位置下标是从1开始的,而不是从0开始

5. ucase(string)

ucase(string)函数是用于将小写字母转大写的。如果不是字母,就不做处理。

6. lcase(string)

lcase(string)函数是用于将大写字母转小写的,如果不是字母,就不做处理。

5. left(string, length)

left(string, length)函数是从string的左边的起始位置开始提取length个字符。

既然有left(), 当然就有right()函数。它们的参数作用是一样的,不同的只是right函数是从字符串的右边起始位置向左提取length个字符。

6. length(string) 

length(string)函数返回string的长度。注意,这个长度计算的是字节,而非字符

在utf8中,中文字符占3个字节,因此这里返回的是12。

7. replace(str, search_str, replace_str)

replace(str, search_str, replace_str)函数会将str中的search_str替换为replace_str。如果没有找到,就什么都不做。

8. strcmp(string1, string2)

strcmp(string1, string2)函数会比较两个字符串的大小。这个函数比较的是字符串的字节数,而不是字符长度。当string1 > string2时,返回1;当string1 < string2时,返回-1;如果双方相等,返回0。

9. substring(str, position, [, length])

substring(str, position, [, length])函数会从str的position位置截取length个字符。注意,该函数的起始位置下标是1,而非0。

10. ltrim(string)、rtrim(string)和trim(string)

ltrim(string)、rtrim(string)和trim(string)三个函数都是用于去除字符串中的空格的。其中ltrim去除左边的空格rtim去除右边的空格trim去除两边的空格。注意,它们不会去除字符串中间的空格

这几个函数还是很重要的,因为它可以防止在某些情况下输入的信息多了前导空格或后导空格。例如用户在输入账号时,因为网络传输或程序员的程序有点问题,不小心给账号加了空格,如果没有这几个函数去除空格,用户的账号就会一直登陆失败。并且空格是不可见的,很多时候我们肉眼也无法看出来是空格的问题。 

11. 题目案例

为了方便大家理解,在这里就举几个题目的例子,让大家更好的理解这些字符串函数的使用。

11.1 获取emp表的ename列的字符集

对于emp表,在上一篇文章中已经讲过了,这里就不再赘述,直接使用。

要查看它的ename列的字符集很简单。

一般来讲我们不会查看表的字符集,但有些特殊情况,如表中插入的数据出现了乱码等问题,就需要查看对应列的字符集,看是不是字符集有问题。

11.2 显示exam_result表中的信息,显示格式为“学生姓名:xxx,语文成绩:xxx,数学成绩:xxx,英语成绩xxx”

exam_result表也是在上一篇文章“mysql数据库的增删查改”中写过了,这里不再赘述。

在这里的显示成绩时,不能按照上面的形式显示,需要特定的格式。此时就可以使用concat函数。

11.3 查询exam_result表中的学生姓名占用的字节数

要统计字节数,就需要使用length函数。

11.4 显示时将emp表中的所有名字中的S替换为“上海”

要替换字符,就需要使用replace函数。

11.5 截取emp表中的ename中的第二个到第三个字符

要截取从position位置开始的字符,就要用substing函数。要截取第二个到第三个,即截取两个字符。

11.6 以首字符小写的方式显示emp表中所有员工的姓名 

要以小写方式显示首字符,因此首先就要将姓名中的首字符切割出来,然后用lcase转为小写,再将转换后的字符与被姓名中的第二个字符及其后面的字符相拼接。在substring 中,如果不填截取长度,则默认截取到结尾。

三、数学函数

在mysql中还存在很多用于数学计算的函数,在这里也简单介绍几个。

对于这些数学函数,大家应该很容易就能知道它的作用,这里就不再一一介绍了,而是介绍几个比较不好理解的函数。

1. bin(decimal_namber)

bin(decimal_namber)函数用于十进制转二进制,但是它只会转为整数的二进制,如果是小数,则只转化整数部分,去除小数部分

后面hex函数也是如此,只转化整数部分,不转化小数部分。 

2. conv(number, from_base, to_base)

conv(number, from_base, to_base)函数是将一个数字从from_base进制转化为to_base进制。用于进制转换。

3. format(number, decimal_places)

format(number, decimal_places)函数是用于格式化小数位的。其中number是需要格式化的数字decimal_places是要保留的位数

 4. rand()

rand()函数是用于生成随机数的,但是随机数范围是[0, 1]

如果大家想获得一个随机整数,就直接乘以对应位数,然后用format函数格式化即可。 

5. ceiling(number)j和floor(number)

ceiling(number)j和floor(number)函数分别是用于向上取整向下取整的。大家可能不太理解什么是向上/向下取整。这里介绍一下,大家在日常生活中应该都用过“四舍五入”,这其实就是一种取整方法。

除了四舍五入的取整方法外,还有向上/向下取整、0向取整等方法。

0向取整其实就是当数字有小数时,向接近0的方向取整。例如3.14和3.59,采用0向取整就是变为3。而-3.14就是取整为-3。

向上取整就是向较大数方向取整。例如3.14就要变为4;-3.14就要变为-3。

向下取整就是向较小数方向取整。例如3.14就要变为3;-3.14就要变为-4。

大家可以将这三种方法看成如下图所示:

由此,我们也可以实际试验一下。

向上取整:

向下取整:

四、其他函数

1. user()

user()函数可以用于查询当前用户

2. database() 

database()函数可以用于查询当前使用的数据库

3. md5()与password()

大家应该知道,数据库中是会保存用户信息的,其中就包括用户的账号密码。而用户的密码在数据库中保存的时候,是不能够以明文的方式保存的。必须进行加密。否则一旦数据库泄漏,就会导致严重的用户信息泄漏。因此,我们需要用特定的方法对密码加密。说是加密,其实就是用hash函数对用户密码做映射,形成一个字符串,将这个字符串保存在数据库内。

md5()就是一个数据加密函数。采用的就是md5加密方法。这个加密方法会将密码进行映射后形成一个长度为32字节的数字加字母字符串

为了方便测试,创建如下一个user表:

如果我们直接向里面插入数据,就是以明文方式显示:

注意,如果大家在用sql语句时发现自己上翻下翻以前的语句时找不到sql语句,其实就是因为这条语句里面可能带有password,mysql会将带有这个字段的sql语句隐藏,不再显示。

很明显,明文保存是非常不安全的。此时,我们就可以用md5()加密:

此时就是一个32字节的字符串。当然,我们也可以用password()函数加密,效果是一样的

只不过password()和md5()采用的加密算法不同

当有用户登录时,账号密码就需要进行匹配。匹配方法也很简单,就是用同样的加密算法加密用户传过来的密码, 然后拿着账号和加密后的密码去数据库找即可。

4. ifnull(val1, val2)

ifnull(val1, val2)函数其实很像我们以前学的三目运算符。它的含义就是,如果val1是null,就显示val2;如果val1不是null,就显示val1。

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

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

相关文章

从零开始 Spring Boot 69:JPA 条件查询

从零开始 Spring Boot 69&#xff1a;JPA 条件查询 图源&#xff1a;简书 (jianshu.com) 在之前的文章中我们学习过条件查询&#xff08;Criterial Query&#xff09;&#xff0c;构建条件查询的一般步骤是&#xff1a; 获取HibernateCriteriaBuilder利用HibernateCriteriaBu…

easy rule 学习记录

总体&#xff1a; 使用方面除了官网的wiki外&#xff0c;推荐阅读 作者&#xff1a;夜尽天明_ 链接&#xff1a;https://juejin.cn/post/7048917724126248967 来源&#xff1a;稀土掘金 非annotation 方式&#xff0c;执行不是jdk proxy模式annotation 方式&#xff0c;和ru…

【Linux操作系统】线程控制

文章目录 线程创建线程等待终止线程利用多线程求和(单进程多线程)获取线程ID取消线程线程分离共享&#xff1f; 线程创建 创建线程需要用的函数是pthread_create。函数原型如下&#xff1a; int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start…

left join 和except方法区别和联系

目录 相同点&#xff1a; left join except 不同点 假设有两个表&#xff1a;A客户表 和 B客户表&#xff0c;客户uid是唯一主键 相同点&#xff1a; 查询在A中的客户 但不在B中&#xff0c;也就是图中的阴影部分&#xff0c;left join 和except方法都可以实现 left join …

Harnessing the Power of LLMs in Practice: A Survey on ChatGPT and Beyond

LLM的系列文章&#xff0c;针对《Harnessing the Power of LLMs in Practice: A Survey on ChatGPT and Beyond》的翻译。 在实践中驾驭LLM的力量——ChatGPT及其后的研究综述 摘要1 引言2 模型实用指南2.1 BERT风格的语言模型&#xff1a;编码器-解码器或仅编码器2.2 GPT风格…

python接口自动化(三十五)-封装与调用--流程类接口关联(详解)

简介 流程相关的接口&#xff0c;主要用 session 关联&#xff0c;如果写成函数&#xff08;如上篇&#xff09;&#xff0c;s 参数每个函数都要带&#xff0c;每个函数多个参数&#xff0c;这时候封装成类会更方便。在这里我们还是以博客园为例&#xff0c;带着小伙伴们实践一…

spring复习:(24)ApplicationContext中的BeanPostProcess是在哪里注册到容器的?

在ApplicationContext实现类的构造方法里。 public ClassPathXmlApplicationContext(String configLocation) throws BeansException {this(new String[] {configLocation}, true, null);}上边的构造方法调用如下构造方法 public ClassPathXmlApplicationContext(String[] conf…

ubuntu使用WHEELTE N100并用rviz显示

写在最开头&#xff0c;如果wheeltec n100被自己改动过参数导致无法读取数据&#xff0c;建议在window的上位机中恢复出厂设置并重新上电&#xff0c;在转入ubuntu。因为我就是这个问题&#xff0c;客服远程操控才帮我解决的。 所有官方资料共享&#xff0c;侵删&#xff1a; …

Flink+StarRocks 实时数据分析新范式

摘要&#xff1a;本文整理自 StarRocks 社区技术布道师谢寅&#xff0c;在 Flink Forward Asia 2022 实时湖仓的分享。本篇内容主要分为五个部分&#xff1a; 极速数据分析 实时数据更新 StarRocks Connector For Apache Flink 客户实践案例 未来规划 点击查看原文视频 &a…

一篇文章让你看懂C语言字符函数和内存函数

目录 一、字符函数 1.strlen函数 1.1strlen函数的介绍 1.2strle函数的使用 1.3模拟实现strlen 1.3.1指针移动法 1.3.2指针减去指针法 1.3.3函数递归法 2.strcpy函数 ​编辑 2.1strcpy函数的介绍 2.2strcpy函数的使用 2.3模拟实现strcpy 3.strcat函数 3.1strcat函数的介…

LiveGBS流媒体平台GB/T28181功能-支持海康大华GB28181语音对讲需要的设备及服务准备

LiveGBS支持海康大华GB28181语音对讲需要的设备及服务准备 1、背景2、准备2.1、服务端必备条件&#xff08;注意&#xff09;2.2、准备语音对讲设备2.2.1、 大华摄像机2.2.1.1、 配置接入示例2.2.1.2、 配置音频通道编号 2.2.2、 海康摄像机2.2.2.1、 配置接入示例 3、开启音频…

初试Python路径库

文章目录 一、pathlib概述二、操作路径对象(一)操作属性(二)连接路径(三)拆分完整路径三、路径对象的常用函数(一)获取当前工作目录(二)创建新目录(三)查看主目录一、pathlib概述 自Python 3.4 以来,pathlib一直是标准库的一部分。 PurePath, PurePosixPath, Pure…

即视角|出海资本热土——印尼市场洞察(上)

即视角Insight 共享即构新洞察&#xff0c;共建行业新动能——ZEGO即构科技基于音视频技术领域的多年深耕&#xff0c;综合面向各行业的服务经验&#xff0c;在【即视角】栏目发布即构对行业的洞察。 此前我们根据即构对出海客户的服务经验&#xff0c;输出了文章《即视角&am…

STL标准模板库 set容器

文章目录 迭代器迭代器的五大分类迭代器系列帮手函数一览 set容器打印任意 STL 容器的printer.hset与vectorset 和 vector 的区别set 和 vector 迭代器的共同点set 和 vector 迭代器的不同点 set 的排序set 的排序&#xff1a;string 会按“字典序”来排set 的排序&#xff1a;…

ai智能绘画生成器有哪些?你知道ai生成图片网站哪个好吗?

曾经有一个年轻的画家&#xff0c;名叫亚历克斯。他对艺术充满了热情和渴望&#xff0c;但却常常感到自己的创作灵感有限。每当他拿起画笔&#xff0c;总是困扰于如何将心中的景象完美地呈现在画布上。 有一天&#xff0c;亚历克斯偶然听说了一个神奇的网站&#xff0c;据说这…

【力扣】20. 有效的括号

有效的括号 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相…

uniapp H5预览PDF文件

1&#xff0c;下载资源后hybrid文件存放在static静态文件里 (点击这里去下载文件) 2&#xff0c;pdf预览页面配置 <template><view style"width: 100vh;"><web-view :src"pdfUrl"></web-view></view> </template><…

【每日一题】1289. 下降路径最小和 II

【每日一题】1289. 下降路径最小和 II 1289. 下降路径最小和 II题目描述解题思路 1289. 下降路径最小和 II 题目描述 给你一个 n x n 整数矩阵 grid &#xff0c;请你返回 非零偏移下降路径 数字和的最小值。 非零偏移下降路径 定义为&#xff1a;从 grid 数组中的每一行选择…

【计算机视觉】简述对EQ-Net的理解

最近又看了一些点云分割的文章&#xff0c;近两年点云分割的文章是真的少&#xff0c;不知道是不是点云分割算法接近了末端。这篇文章主要提出了一个基于查询方法的统一范式&#xff0c;它解决了一些不仅仅是点云分割的问题&#xff0c;还解决了三维点云分类和三维目标检测的问…

解密AI图像安全技术:智能守护数智时代,低代码平台助力圈复杂操作!

前言 随着数智时代的来临&#xff0c;人们进入了一个全新的智能化世界。在这个时代中&#xff0c;人工智能&#xff08;AI&#xff09;成为了一项重要的技术突破&#xff0c;其应用也无处不在。其中&#xff0c;AI图像安全技术作为保障个人和企业数据安全的重要环节&#xff0c…