首页 > 数据库 >带你从入门到精通——MySQL(四. 函数基础)

带你从入门到精通——MySQL(四. 函数基础)

时间:2024-11-21 20:15:59浏览次数:3  
标签:11 输出 精通 入门 -- 00 MySQL SELECT 函数

 建议先阅读我之前的博客,掌握一定的MySQL前置知识后再阅读本文,链接如下:

带你从入门到精通——MySQL(一. 基础知识)-CSDN博客

带你从入门到精通——MySQL(二. 单表查询)-CSDN博客

带你从入门到精通——MySQL(三. 多表查询)-CSDN博客

目录

四. MySQL函数基础

4.1 数值函数

4.1.1 ROUND函数

4.1.2 FORMAT函数

4.1.3 FLOOR函数和CEIL函数

4.1.4 MOD函数和POW函数​​​​​​​

4.1.5 RAND函数

4.2 字符串函数

4.2.1 LOWER函数和UPPER函数

4.2.2 REPEAT函数和REVERSE函数

4.2.3 CONCAT函数和CONCAT_WS函数

4.2.4 REPLACE函数

4.2.5 字符串截取函数

4.2.6 CHAR_LENGTH函数和LENGTH函数

4.3 时间日期函数

4.3.1 获取当前时间的函数

4.3.2 计算时间差的函数

4.3.3 获取年月日时分秒的函数

4.3.4 时间日期转换函数


四. MySQL函数基础

        在MySQL中有很多的内置函数,除了之前介绍过的MAX()、SUM()等聚合函数之外,还有很多其他内置函数:如数值函数、字符串函数、时间日期函数、流程控制函数、开窗函数等,下面为大家一一介绍MySQL中常用的内置函数。

        注意:可以通过HELP 函数名来查看指定函数的帮助文档,示例: HELP COUNT。

4.1 数值函数

4.1.1 ROUND函数

         ROUND函数的格式为ROUND(x,y),x表示待处理的数据,y表示要保留的小数位数,该函数的作用是对x进行四舍五入的操作,y参数可省,默认为0即只保留整数。

SELECT ROUND(1.7);
-- 输出2
SELECT ROUND(1.3333, 2);
-- 输出1.33
SELECT ROUND(2.600, 2);
-- 输出2.60

4.1.2 FORMAT函数

        FORMAT函数的格式为FORMAT(x,y),x表示待处理的数据,y表示要保留的小数位数,该函数的作用与ROUND函数相似,同样会对x进行四舍五入的操作,但是FORMAT函数会对输出的数据进行格式化,如果数据值很大推荐使用FORMAT函数,更加方便阅读,其中y参数不可省

SELECT FORMAT(1054501.6, 2);
-- 输出1,054,501.60
SELECT FORMAT(1164645.123, 2);
-- 输出1,164,645.12
SELECT FORMAT(124541.169, 1);
-- 输出124,541.2

4.1.3 FLOOR函数和CEIL函数

        这两个函数都是取整函数,只接收一个x参数,表示待处理的数据,不同的是FLOOR函数对x进行向下取整,而CEIL函数对x进行向下取整。

SELECT FLOOR(-2.3);
-- 输出-3

SELECT CEIL(4.1);
-- 输出5

4.1.4 MOD函数和POW函数

        MOD函数的格式为MOD(x,y),x表示被除数,y表示除数,该函数输出x除以y后的余数;POW函数的格式为POW(x,y),x表示底数,y表示指数,该函数输出x的y次幂。

SELECT MOD(7, 3);
-- 输出1
SELECT MOD(16, 4);
-- 输出0

SELECT POW(3, 2);
-- 输出9
SELECT POW(7, 1);
-- 输出7

4.1.5 RAND函数

        RAND函数会输出一个0到1之间的随机数,包含0,不包含1,其格式为RAND(x),该函数可以接收一个参数x,x表示随机数种子,用于固定随机数的生成,使得数据能够复现,如果使用同一个随机数种子,生成的随机数序列一定相同。

4.2 字符串函数

4.2.1 LOWER函数和UPPER函数

        LOWER函数和UPPER函数都是对字符串进行操作的函数,它们都接收一个字符串参数,LOWER函数会把该字符串中的英文字母转换为小写,而UPPER函数会把该字符串中的英文字母转换为大写。

SELECT LOWER('Hello MySQL!');
--  输出'hello mysql!'

SELECT UPPER('Hello MySQL!');
-- 输出'HELLO MYSQL!'

4.2.2 REPEAT函数和REVERSE函数

        REPEAT函数能够拼接多个相同的字符串,该函数的格式为REPEAT(x,y),x表示待拼接的字符串,y表示重复拼接的次数。

SELECT REPEAT('感谢点赞', 1);
-- 输出'感谢点赞'
SELECT REPEAT('感谢收藏', 3);
-- 输出'感谢收藏感谢收藏感谢收藏'

        REVERSE函数能反转整个字符串,该函数接收一个待处理的字符串,并输出将该字符串反转后的字符串。

SELECT REVERSE('123456789'); 
-- 输出'789654321'

4.2.3 CONCAT函数和CONCAT_WS函数

        CONCAT函数和CONCAT_WS函数都用于多个字符串的拼接操作,都可以接收多个字符串作为参数,不同的是CONCAT_WS函数的第一个参数表示分隔符,会通过该分隔符对字符串进行拼接,而CONCAT函数只能对多个字符串进行直接拼接。

SELECT CONCAT('点赞', '收藏', '关注');
-- 输出'点赞收藏关注'

SELECT CONCAT_WS('+', '点赞', '收藏', '关注');
-- 输出'点赞+收藏+关注'

4.2.4 REPLACE函数

        REPLACE函数用于替换字符串中的某些字符,该函数的格式为REPLACE(x,y,z),其中x表示待处理的字符串,y表示x中需要被替换的字符,z表示替换为的字符。

SELECT REPLACE('点赞收藏关注点赞收藏关注', '点赞', '');
-- 输出'收藏关注收藏关注'
SELECT REPLACE('不点赞不收藏不关注不点赞不收藏不关注', '不', '要');
-- 输出'要点赞要收藏要关注要点赞要收藏要关注'

4.2.5 字符串截取函数

        常用的字符串截取函数主要有三个,SUBSTR函数、LEFT函数以及RIGHT函数。

        SUBSTR函数的格式为SUBSTR(x,y,z),表示从x字符串的第y个字符(注意这里从1开始计数,即字符串开头的字符为第1个字符)往后截取z个字符,参数z可省略,表示截取到该字符串的末尾,最后输出完成截取后的子串。

        LEFT函数和RIGHT函数都接收x,y两个参数,x参数表示待处理的字符串,y参数表示需要截取的字符个数,不同的是LEFT函数表示从左截取y个字符,而RIGHT函数表示从右截取y个字符。

SELECT SUBSTR('----点赞收藏关注----', 5, 6);
-- 输出'点赞收藏关注'

SELECT LEFT('感谢点赞收藏关注感谢', 8);

-- 输出'点赞收藏关注感谢'
SELECT RIGHT('感谢点赞收藏关注感谢', 8);
-- 输出'感谢点赞收藏关注'

4.2.6 CHAR_LENGTH函数和LENGTH函数

        CHAR_LENGTH函数和LENGTH函数都是用于获取长度的函数,都只接收一个x参数,表示待处理的字符串,不同的地方是CHAR_LENGTH函数获取的是字符的长度,每个字母、数字、汉字等字符的字符长度都为1,而LENGTH函数获取的是存储字节的长度,在URF8的编码格式中每个字母、数字的存储字节长度为1,汉字的存储长度为3。

SELECT CHAR_LENGTH('123点赞abc');
-- 输出8

SELECT LENGTH('123点赞abc');
-- 输出12

4.3 时间日期函数

4.3.1 获取当前时间的函数

        获取当前时间的函数主要有以下三个NOW函数、CURRENT_DATE函数以及CURRENT_TIME函数,NOW函数能获取当前的年月日时分秒,CURRENT_DATE函数获取当前的年月日,CURRENT_TIME函数获取当前的时分秒。

-- 获取当前datetime类型的时间
SELECT NOW();

-- 获取当前date类型的时间
SELECT CURRENT_DATE();

-- 获取当前time类型的时间
SELECT CURRENT_TIME();

4.3.2 计算时间差的函数

        计算时间差的函数主要有以下四个DATE_ADD函数、DATE_SUB函数、DATEDIFF函数、TIMESTAMPDIFF函数。

        DATE_ADD函数以及DATE_SUB函数的作用相似,用于计算指定间隔的时间并输出,这两个函数都接收一个date类型的时间参数x,以及一个整数类型的参数y,不同的是DATE_ADD函数输出x的之后y天/月/年的日期,DATE_SUB函数输出x的之前y天/月/年的日期。

SELECT DATE_ADD('2024-11-21', INTERVAL 30 DAY);
-- 输出2024-12-21
SELECT DATE_ADD('2024-11-21', INTERVAL 2 MONTH);
-- 输出2025-01-21
SELECT DATE_ADD('2024-11-21', INTERVAL 1 YEAR);
-- 输出2025-11-21

SELECT DATE_SUB('2024-11-21', INTERVAL 60 DAY);
-- 输出2024-09-22

        DATEDIFF函数、TIMESTAMPDIFF函数则是都用于计算两个时间参数的差值,其中DATEDIFF函数接收x,y两个参数,计算并输出这两个时间参数之间的天数差,注意该函数是使用参数x减去参数y来获得天数差,TIMESTAMPDIFF函数,接收x,y,z三个参数,x表示计算的是年数差/月数差/天数差,x参数输入值只能为YEAR/MONTH/DAY三者之一,y和z表示两个时间参数,注意与DATEDIFF函数不同的前者减后者不用,TIMESTAMPDIFF函数是使用z减去y即后者减前者来获得时间之差。

SELECT DATEDIFF('2024-11-21 11:00:00', '2024-11-19 08:00:00');
-- 输出2

SELECT TIMESTAMPDIFF(MONTH, '2024-9-21 04:00:00', '2024-11-21 9:00:00');
-- 输出2
SELECT TIMESTAMPDIFF(DAY, '2024-11-10 04:00:00', '2024-11-21 9:00:00');
-- 输出11

4.3.3 获取年月日时分秒的函数

        获取年月日的函数主要有:YEAR用于获取年份、MONTH用于获取月份、DAY用于获取日期、HOUR用于获取小时数、MINUTE用于获取分钟数、SECOND用于获取秒数,WEEKDAY用于计算时间日期是星期几(0是周一,1是周二,依次类推)。

SELECT YEAR('2024-11-21 11:00:59');
-- 输出2024
SELECT MONTH('2024-11-21 11:00:59');
-- 输出11
SELECT DAY('2024-11-21 11:00:59');
-- 输出21
SELECT HOUR('2024-11-21 11:00:59');
-- 输出11
SELECT MINUTE('2024-11-21 11:00:59');
-- 输出0
SELECT SECOND('2024-11-21 11:00:59');
-- 输出59
SELECT WEEKDAY('2024-11-21 11:00:59');
-- 输出3

4.3.4 时间日期转换函数

        这里先补充一个时间戳的概念,时间戳是指某个时间距离UTC(协调世界时)的1970-01-01 00:00:00 过去了多久(通常以秒或毫秒为单位)。
        首先介绍DATE_FORMAT函数,是一个日期转字符串的函数,该函数接收两个参数x,y,x为一个时间参数,y表示一种转换格式,用于指定字符串的输出格式。

SELECT DATE_FORMAT('2024-11-21 11:00:59','%Y-%m-%d');
-- 输出'2024-11-21'
SELECT DATE_FORMAT('2024-11-21 11:00:59','%Y-%m-%d %H:%i');
-- 输出'2024-11-21 11:00'
SELECT DATE_FORMAT('2024-11-21 11:00:59','%Y年%m月%d日 %H时%i分%s秒');
-- 输出'2024年11月21日 11时00分59秒'

        STR_TO_DATE函数是一种字符串转时间的函数,该函数接收两个参数x,y,x为一个时间的字符串表示,y表示一种转换格式,用于指定时间的输出格式,注意DATE_FORMAT函数接收的是一个时间类型的数据,输出的是一个能表示时间的字符串,而STR_TO_DATE函数接收的是一个能表示时间的字符串,输出的是一个时间类型的数据,注意如果y参数只能为datetime或者date类型的格式,否则会输出null值,如果'%Y-%m-%d %H:%i:%s'格式中时分秒缺失的话,会自动补0,而年月日缺失则会输出null值。

SELECT STR_TO_DATE('2024-11-21 11:00:59', '%Y-%m-%d %H:%i:%s');
-- 输出'2024-11-21 11:00:59'
SELECT STR_TO_DATE('2024-11-21 11:00:59', '%Y-%m-%d');
-- 输出'2024-11-21'

        UNIX_TIMESTAMP函数的作用是将时间类型数据或一个能表示时间的字符串转为时间戳,以秒为单位输出。

        FROM_UNIXTIME函数的作用是将以秒为单位的时间戳转指定格式的字符串输出。

select UNIX_TIMESTAMP('1970-01-01 09:00:00');
-- 输出3600

select FROM_UNIXTIME(0, '%Y-%m-%d %H:%i:%s');
-- 输出1970-01-01 08:00:00

        注意,这里以东八区的时间为标准。

标签:11,输出,精通,入门,--,00,MySQL,SELECT,函数
From: https://blog.csdn.net/2401_86480334/article/details/143951081

相关文章

  • kettle spoon连接mysql数据库报错 [mysql] : org.pentaho.di.core.exception.KettleDa
    先说结论。因为kettle/lib文件夹下没有对应版本的ar包,导致链接不上mysql。找到kettle下载文件,地址在 kettle/data-integration/lib 下载两个文件,一个5.1.41-bin文件,另一个对应自己mysql版本的jar包文件,下面举例我安装的8.0.24版本 将下载的两个jar包复制到 kettle/da......
  • ELK 圣经:Elasticsearch、Logstash、Kibana 从入门到精通
    本文原文链接文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完......
  • Ubuntu终端常用命令从入门到入土
    1.终端方式1:通过鼠标左键点击终端图标。方式2:使用快捷键CtrlAltT打开一个新终端。方式3:使用快捷键CtrlAltT打开一个同路径新终端。方式4:使用快捷键CtrlShiftT打开一个同路径新终端(同一个终端中的多个标签)终端字体调整放大:CtrlShift+缩小:Ctrl-复制粘贴......
  • 点餐管理系统设计与实现(Java+SpringBoot+MySql)
              目录第1章 绪论1.1选题动因1.2目的和意义1.3论文结构安排第2章 开发环境与技术2.1MySQL数据库2.2 Tomcat介绍2.3 vue技术2.4 SpringBoot框架第3章 系统分析3.1可行性分析3.1.1操作可行性分析3.1.2经济可行性分析......
  • MySQL 主从复制之多线程复制
    目录一、MySQL多线程复制的背景二、MySQL5.5主从复制1、原理2、部署主从复制2.1、主节点安装配置MySQL5.52.2、从节点安装配置MySQL5.53、检查主从库server_id和log_bin配置4、创建主从复制用户5、获取主库的二进制日志文件和位置6、配置从库连接主库参数并启动从库复制......
  • KOA 入门,简单实现用户注册和登录逻辑
    koa首先来介绍一下什么是koa。koa是由Express背后的团队设计的一个新的Web框架,旨在成为Web应用和API的更小、更具表现力和更强大的基础。通过利用异步函数,koa允许你放弃回调并大大提高错误处理能力。koa的核心中没有捆绑任何中间件,它提供了一套优雅的方法,使编写......
  • MySQL timestamp 默认值(explicit_defaults_for_timestamp)
    迁移数据库遇timestamp字段setnull。出现报错解决方案mysql>showvariableslike'explicit_defaults_for_timestamp';+---------------------------------+-------+|Variable_name|Value|+---------------------------------+-------+|explici......
  • Iris框架的学习笔记(快速入门)
    Iris类似于Flask框架,使用函数作为方法的入口实例化一个app主类,通过app.方法请求类型(地址,触发函数)来匹配请求例如:app.Get("/user/{name}",func(ctxiris.Context){name:=ctx.Params().Get("name")ctx.Writef("Hello%s",name)})其中获取请求......
  • Java从入门到放弃之 IO (三)------- 绝对看的懂,看不懂欢迎私信
    Java从入门到放弃之IO(三)Java从入门到放弃之IO(三)装饰器模式问题背景解决方案就是引入装饰器模式IO流关闭问题Java从入门到放弃之IO(三)装饰器模式在上一篇我们引入了装饰器模式的定义。那么这一章我们进一步,装饰器模式解决什么问题?以及为什么JavaIO要使用装......
  • Python 入门(小白版)の7个基础代码 @Kerin森森
    Python,据说是很好入门的一门编程语言,so它也变成了0基础的我(@Kerin森森)的入门选择,在这里分享一下自己的一些学习记录and心得吧。如果你也和我一样是初学者,那就跟森森一起学习一起进步吧!1.第一个Python程序:HelloWorld每个程序员的旅程几乎都是从打印“Hello,World!”开始的......