MySQL函数讲解(谓词、CASE)

news2024/10/2 10:25:58

目录

MySQL常见函数

字符串函数 进行字符串操作的函数

算术函数 进行数值计算的函数

日期函数 进行日期操作的函数

转换函数 进行数据类型和值转换的函数

流程函数  进行条件删选

聚合函数 进行数据聚合的函数

谓词 一般用于条件判断


什么是函数

函数指一段可以直接被另一段程序调用的程序或代码

MySQL常见函数

字符串函数 进行字符串操作的函数

MySQL常用的内置 字符串函数如下

CONCAT(S1,S2……Sn)          字符串拼接函数,将S1,S2……Sn拼接为一个字符串

LENGTH(str)                        字符串长度,显示出字符串中包含多少个字符

LOWER(str)                         将字符串str全部转为小写

UPPER(str)                          将字符串str全部转为大写

REPLACE(str1,str2,str3)        字符串替换,将str1中的str2部分替换为str3

LPAD(str,n,pad)                   左填充,用字符串pad对str的左边进行填充,使得str达到n个字符串长度

RPAD(str,n,pad)                  右填充,用字符串pad对str的右边进行填充,使得str达到n个字符串长度

TRIM(str)                             去掉字符串的头部和尾部的空格

SUBSTRING(str,start,len)      返回字符串str从start位置起的len个长度的字符串(字符串的索引是从1开始的,而不是0)

update staff1 set number lpad(number,8,'0'); #修改number字段值,使用字符串”0”对其左填充,使得number达到8个字符串长度(注意:number的数据类型为varchar)

算术函数 进行数值计算的函数

MySQL常用的内置 算术函数如下

+(加法)、-(减法)、*(乘法)、/(除法)

ABS(x)                   对x取绝对值

MOD(x,y)              返回x/y的模(余数)

RAND()                 返回0~1内的随机数

ROUND(x,y)          求参数x的四舍五入的值,保留y位小数

CEIL(x)                  对x向上取整

FLOOR(x)              对x向下取整

select round(rand()*100000,0);   #随机生成5位数的验证码     如果产生的小数0.012345,生成的验证码就只有4位数1234,因此需要补0
select lpad(round(rand()*100000,0),5,'0')#补0

日期函数 进行日期操作的函数

MySQL常用的内置 日期函数如下

CURDATE()           返回当前日期(年月日)

CURTIME()            返回当前时间

NOW()                  返回当前日期和时间

YEAR(date)           获取指定date(年月日)的年份

MONTH(date)       获取指定date(年月日)的月份

DAY(date)             获取指定date(年月日)的天数

DATE_ADD(date , INTERVAL expr type)     在指定date(年月日)上增加expr(expr可以是年/月/日,具体是什么类型由type决定)

DATEDIFF(date1 , date2)     返回起始时间date1和结束时间date2之间的天数(date1-date2)

select date_add(now(),interval 20 day );    #当前日期的20天之后的日期(month为月,year为年)
select name,datediff(curdate(),entrydate) as 'date' from staff1 order by date desc;    #根据入职时间(entrydate)推算出入职天数,并按照倒序排序

转换函数 进行数据类型和值转换的函数

CAST(数据1 AS 数据类型1)      将数据1转为数据类型1

COALESCE(数据1 , 数据2 ,…… )

主要由两个用途:1、将NULL替换为其他的值

2、返回此数据列表中第一个非null表达式的值

select cast('001' as signed integer); #将字符串“001”转换为有符号的整数,显示结果为1
select coalesce(number,0) from staff1;   #查询staff1表的number字段,并将此字段的NULL值替换为0
select coalesce(number,age,0) from staff1; #查询staff1表的number字段;当numbernullage不为null时,number返回age的值;当numberage都为null时,返回0;当number为非null时,返回真实值

流程函数  进行条件删选

流程函数一般在SQL语句中实现条件筛选,从而提高语句的效率

MySQL常用的内置 流程函数如下

如果value(条件表达式)为true,则返回t,否则返回f

IF(vaule , t , f)                     

如果value1(可以是某个记录)不为空,则返回value1,负责返回value2

IFNULL(value1 , value2)      

如果val1为true,则返回res1;val2为true,返回res2;否则返回default

CASE WHEN [ val1 ] THEN [res1] WHEN [val2] THEN [res2] …… ELSE [default] END

如果espr的值等于val1,返回res1;espr的值等于val2,返回res2;否则返回default

CASE [expr] WHEN [val1] THEN [res1]  WHEN [val2] THEN[res2] …… ELSE [default] END

select name,(case origo when '重庆' then '新一线城市' else '非一线城市' end) from staff1; #查询staff1表的name和工作城市字段,如果工作城市为重庆,则显示为新一线城市,其余为非一线城市

聚合函数 进行数据聚合的函数

聚合函数的使用在DQL的分组查询有介绍

将一列数据作为一个整体,进行纵向计算(所有NULL值不参与计算)

count     统计数量(一列有多少个值)

max        最大值(一列的最大值)

min        最小值(一列的最小值)

avg         平均值(一列的平均值)

sum        求和(一列的所有数值求和)

聚合函数使用格式

SELECT 聚合函数 (字段列表) AS [别名] FROM 表名 [WHERE条件列表];

select COUNT(*) from emp;   #统计这个表有多少行(由于Null不参与统计,可能每个列的统计数值不一致,其中会取最大值作为结果返回)
select max(age) from emp;   #统计age的最大值
select avg(age) from emp;   #统计age的平均值

谓词 一般用于条件判断

谓词的使用在DQL的条件查询有介绍

谓词,全名为比较谓词;是一种需要满足返回值为真值True的函数

BETWEEN … AND …     在某个范围之内(左闭右闭)

IN(…)                           …为多个信息,in(…)表示只要满足…中的某个信息就算匹配,为真值

NOT IN(…)                   …为多个信息,只要不满足…的所有信息就算匹配,为真值

LIKE 占位符               模糊匹配(_表示匹配单个字符、%表示匹配任意字符)(OR的简便用法)

IS NULL                       表示NULL值

IS NOT NULL               表示非NULL值

select * from staff1 where gender is null ;     #查询gendernull,并将其对应的所有字段的值都显示出来
select * from staff1 where gender is not null ; #查询gender为非null,并将其对应的所有字段的值都显示出来
select * from staff1 where gender in ('','') ;  #查询性别为男、或者性别为女的信息,并将其对应的所有字段的值都显示出来
select * from staff1 where name like '__'  ;      #查询名称为2个字符信息,并将其对应的所有字段的值都显示出来
select * from staff1 where number between 20000100 and 20000102 #查询number2000010020000102之间对应的信息,并将其对应的所有字段的值都显示出来

注意事项

对于IN来说,如果此运算符的两侧有一个为NULL,则返回结果只能是NULL或1;如果找不到匹配项则返回NULL;如果找到匹配项,则返回1;

对于NOT IN来说,如果此运算符的两侧有一个为NULL,则返回结果只能是NULL或0;如果找不到匹配项则返回NULL;如果找到匹配项,则返回0;

select null in (1,3) , null in (1,3,null); #结果为null  null
select 10 in (1,null), 10 in (null,10); #结果为null  1
select 10 in (1,20), 10 in (1,10);      #结果为0  1

select null not in (1,3) , null not in (1,3,null); #结果为null  null
select 10 not in (1,null), 10 not in (null,10); #结果为null  0
select 10 not in (1,20), 10 not in (1,10);      #结果为1 和 0

MySQL基础语法(DDL、DQL、DML、DCL)_静下心来敲木鱼的博客-CSDN博客https://blog.csdn.net/m0_49864110/article/details/131913031?spm=1001.2014.3001.5502

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

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

相关文章

web前端tips:js继承——原型链继承

原型链继承 原型链继承是 JavaScript 中实现继承的一种方式,它通过使用原型来实现对象之间的继承关系。 在 JavaScript 中,每个对象都有一个原型(prototype),它是一个指向另一个对象的引用。当我们访问一个对象的属性…

Quartz线程调度源码分析

Quartz作为任务调度的组件,其中涉及到多种线程,主要分为主线程、调度线程和工作线程。 主线程:创建Quartz的调度工厂(SchedulerFactory)、调度器(Scheduler)、触发器(Trigger)、任务(Job)并启动调度器的线程。这里的主…

Pytest结合数据驱动-yaml

Pytest 结合数据驱动 YAML 数据驱动 什么是数据驱动? 数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。简单来说,就是参数化的应用。数据量小的测试用例可以使用代码的参数化来实现数据驱动,数据量大的…

Ceph社区上游正式合入openEuler原生支持,并通过CI持续验证

作为覆盖全场景应用、支持多样性算力的面向数字基础设施的开源操作系统,openEuler始终遵循“上游优先”的策略,帮助上游开源软件原生支持openEuler,让openEuler系操作系统的用户可以在开发、集成、使用这些开源软件或基于这些开源软件的产品和…

比较版本号(力扣)思维 JAVA

给你两个版本号 version1 和 version2 ,请你比较它们。 版本号由一个或多个修订号组成,各修订号由一个 ‘.’ 连接。每个修订号由 多位数字 组成,可能包含 前导零。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始…

vue3+ts+elementui-plus二次封装树形表格

复制粘贴即可&#xff1a; 一、定义table组件 <template><div classmain><div><el-table ref"multipleTableRef" :height"height" :default-expand-all"isExpend" :data"treeTableData"style"width: 100%…

IL汇编字符串连接

在此实现了一个基本的IL汇编程序&#xff1b; 了解MSIL汇编和IL汇编评估堆栈_bcbobo21cn的博客-CSDN博客 它用了下面两句来在屏幕输出字符串&#xff0c; ldstr "I am from the IL Assembly Language..." call void [mscorlib]System.Console::WriteLine (string) …

Ros终端出现找不到bash: /home/***/devel/setup.bash: 没有那个文件或目录

现象&#xff1a;Ros终端出现找不到bash: /home/***/devel/setup.bash: 没有那个文件或目录 问题&#xff1a;配置时路径写错 解决方法&#xff1a;改正路径 1.打开文件 gedit ~/.bashrc2.修改正确路径

Day 42算法记录| 动态规划 08

这里写目录标题 139. 单词拆分多重背包问题背包问题总结 139. 单词拆分 单词就是物品&#xff0c;字符串s就是背包 1.dp[0]背包啥也不要用装&#xff0c;true。 2. for循环&#xff0c;顺序很重要&#xff0c;所以先背包再物品 如果求组合数就是外层for循环遍历物品&#xff0…

UG\NX二次开发 遍历部件中所有表达式

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan 简介: 遍历部件中所有表达式 效果: 代码: #include "me.hpp" #include <uf_defs.h> #include <NXOpen/NXException.hxx> #include <NXOpen/Session.hxx> #include <NXO…

java根据模板导出word

java根据模板导出word 日常开发中&#xff0c;常常会遇到各种各样的表格进行导出&#xff0c;比较好的办法就是提前弄好word模版&#xff0c;再通过遍历的方式进行导出文档 1、制作word模版 模版编写 内容替换 目标下面模版进行多页展示 将word转换成xml 将xml格式化 再将x…

FTP文件传输工具:简单、高效、实用的数据传输方式

在当今的信息化社会&#xff0c;数据已经成为各行各业的重要资产&#xff0c;而数据的传输和交换则是数据价值的体现。在很多场景中&#xff0c;企业需要传输或接收大文件&#xff0c;比如设计图纸、视频素材、软件开发包、数据库备份等。这些文件的大小通常在几百兆字节到几十…

版本控制泄露代码

在文章的开头我们首先得了解什么是版本控制 在实际的开发过程中&#xff0c;我们会用到两个工具来进行版本控制和代码托管&#xff0c;它们分别是git和svn。 而在CTF中我们主要面对的就是git或svn的版本控制泄露。 &#xff08;1&#xff09;在使用 SVN 管理本地代码过程中&am…

在拦截器中使用redis报错空指针

问题 当在拦截器中使用 redis 时&#xff0c;获取不到 RedisTemplate 对象 原因 拦截器在SpringContext初始化之前就执行了&#xff0c;即Bean初始化之前它就执行了&#xff0c;所以肯定是无法获取SpringIOC容器中的内容的 解决 提前实例化拦截器 在配置类里面先实例化拦截…

vue2项目迁移到vue3中的改动——vuex部分——基础积累2

pinia中文文档里面有关于vuex的部分&#xff1a; Pinia 最初是在 2019 年 11 月左右重新设计使用 Composition API 。从那时起&#xff0c;最初的原则仍然相同&#xff0c;但 Pinia 对 Vue 2 和 Vue 3 都有效&#xff0c;并且不需要您使用组合 API。 除了安装和 SSR 之外&…

【使用时空RBF-NN进行非线性系统识别】实现了 RBF、分数 RBF 和时空 RBF 神经网络,用于非线性系统识别研究(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 2.1 算例1 2.2 算例2 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码实现 &#x1f4a5;1 概述 本文用于非线性系统识别任务的径向基函数神经网络&#xff08;RBF-NN&#xff09;的三种变体。特别是&#xff0c;我实现…

Cesium态势标绘专题-正多边形(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

Android OpenGL 教程——窗口初始化绘制矩形

上节介绍了 Native 工程初始化&#xff0c;但是我们的窗口什么都没有&#xff0c;这节我们将 NativeActivity 创建的 window 绑定到 OpenGL 创建的 display 的 surface 上&#xff0c;并且绘制背景颜色和三角形&#xff0c;通过三角形绘制出一个矩形 显示系统创建 void Rende…

app专项性能测试测试指标和测试方法

工作中没有做过app这块的性能测试&#xff0c;但是你有面试问到过&#xff0c;现在做个总结如下 1、首次加载&#xff08;冷启动&#xff09; A.使用logcat监控activitymanager B.adb shell am start -w C.人工秒表计数 2、非第一启动&#xff08;热启动&#xff09; 应…

【开发心得】百度终于向百度发起挑战

没错&#xff0c;题目的确读起来别扭&#xff0c;但事实如此。 第一个百度&#xff0c;说的是百度的“文心千帆”。&#xff08;以下简称“千帆”&#xff09; 第二个百度&#xff0c;说的是百度的“搜索引擎”。&#xff08;以下简称“搜索”&#xff09; 这么讲就容易理解…