MySQL - 函数

1 什么是函数?

要想实现上面的这些效果,就得借助于MySQL当中的内置函数

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

MySQL当中内置了很多的函数,根据其操作的数据类型,分为以下四类:

  • 字符串函数 
  • 数值函数
  • 日期函数
  • 流程控制函数

1.1 字符串函数

函数功能
char_length(s)返回字符串的字符长度
concat(s1,s2,... sn)字符串拼接,将s1,s2,... sn拼接成一个字符串
concat_ws(sep,s1,s2,... sn)字符串拼接,将s1,s2,... sn拼接成一个字符串,中间使用sep分隔
left(s,len)返回字符串左侧的len个长度的字符串
right(s,len)返回字符串右侧的len个长度的字符串
substring(str,start,len)返回字符串str从start位置起的len个长度的字符串[注意:start从1开始]
-- MySQL函数:
-- 字符串函数
-- 1. char_length(s) 返回字符串的字符长度
select name,char_length(name) from tb_emp;-- 2. concat(s1,s2,...sn) 字符串拼接,将s1,s2,...sn拼接成一个字符串
select concat(id,'-',name) from tb_emp;-- 3. concat_ws(sep,s1,s2,...sn) 字符串拼接,将s1,s2,...sn拼接成一个字符串,中间使用sep分隔
select concat_ws(' - ',username,name) from tb_emp;-- 4. left(s,len) 返回字符串左侧的len个长度的字符串
select left(username,5) from tb_emp;-- 5. right(s,len) 返回字符串右侧的len个长度的字符串
select right(username,5) from tb_emp;-- 6. substring(str,start,len) 返回字符串str从start位置起的len个长度的字符串
-- 比如:我想查询每一个员工的姓氏
select substring(name,1,1) from tb_emp;

1.2 数值函数  

函数功能
ceil(x)向上取整
floor(x)向下取整
rand()返回0~1内的随机数
round(x,y)求参数x的四舍五入的值,保留y位小数
-- 数值函数
-- select后面如果没有指定任何的from的话,代表我们不需要从表当中来查询
-- 1. ceil(x) 向上取整
select ceil(2.1); -- 3-- 2. floor(x) 向下取整
select floor(2.9); -- 2-- 3. rand() 返回0~1内的随机数
select rand(); -- 0.632749031887156-- 4. round(x,y) 求参数x的四舍五入的值,保留y位小数
select round(2.453,2); -- 2.45

1.3 日期函数 

日期时间类型的函数 

函数功能
now()返回当前日期和时间
curdate()返回当前日期
curtime()返回当前时间
year(date)获取指定date日期的年份
month(date)获取指定date的月份
day(date)获取指定date的日期
datediff(date1,date2)返回起始时间date1和结束时间date2之间的天数
date_format(date,format)日期时间格式化
-- 日期时间类型的函数
-- 1. now() 返回当前日期和时间
select now(); -- 2023-09-01 19:02:40-- 2. curdate() 返回当前日期
select curdate(); -- 2023-09-01-- 3. curtime() 返回当前时间
select curtime(); -- 19:02:59-- 4. year(date) 获取指定date日期的年份
select year('2023-02-05 00:09:45'); -- 2023-- 5. month(date) 获取指定date的月份
select month('2023-02-05 00:09:45'); -- 2-- 6. day(date) 获取指定date的日期
select day('2023-02-05 00:09:45'); -- 5-- 7. datediff(date1,date2) 返回起始时间date1和结束时间date2之间的天数
select datediff('2002-07-08 00:09:45','2023-08-14 00:09:45'); -- 7707-- 8. date_format(date,format) 日期时间格式化
-- format函数多的一批,鼠标往上一悬浮,会自动提示
select date_format('2002-07-08 00:09:45','%Y'); -- 2022-- 需求:获取2015年入职的员工
select * from tb_emp where year(entrydate) = '2015';

1.4 流程控制函数(最重要) 

函数功能
if(value,t,f)如果条件表达式value为true,则返回t,否则返回f
ifnull(value1,value2)如果value1不为空,返回value1,否则返回value2
case when cond1 then res1 when cond2 then res2... [else result] end如果cond1为true,返回res1,... 否则返回result默认值
case expr when val1 then res1 ... [else result] end如果表达式expr的值等于val1,返回res1,... 否则返回result默认值,最后语法结束来一个end
-- 流程控制函数
-- 1. if(value,t,f)  如果条件表达式value为true,则返回t,否则返回f
-- 要求:按照性别进行分组,如果gender=1,显示男性员工;如果gender=2,显示女性员工
select if(gender = 1, '男性员工', '女性员工') as 性别, count(1) as 总数
from tb_emp
group by gender;-- 2. ifnull(value1,value2) 如果value1不为空,返回value1;否则返回value2
-- 查询员工的姓名及职位,如果员工没有职位,展示'未分配职位'
select name as '姓名', ifnull(job, '未分配职位') as '职位'
from tb_emp;-- 3. case when condition1 then res1 when cond2 then res2...else result end
-- gender性别转换:1转化为男性员工,2转化为女性员工
select name, (case when gender = 1 then '男性员工' when gender = 2 then '女性员工' end) as '性别'
from tb_emp;-- 4. case expr when val1 then res1 when val2 then res2 ... else result end
-- job职位转换,说明: 1 班主任 ,2 讲师, 3 学工主管, 4 教研主管
select name                 as '姓名',(case jobwhen 1 then '班主任'when 2 then '讲师'when 3 then '学工主管'when 4 then '教研主管'else'@失业@' end) as '职位'
from tb_emp;

2. MySQL函数-案例

-- MySQL函数-案例
-- 计算每个员工的入职天数  datediff(date1,date2) 返回起始时间date1和结束时间date2之间的天数
select name as 员工姓名, datediff(now(), entrydate) as '入职天数' from tb_emp;

-- 19.查询出来不是班主任的员工
select * from tb_emp where job != 1 or job is null;-- 20.查询出入职人数最多的月份
select month(entrydate) as '月份', count(*) as '总数'
from tb_emp
group by month(entrydate)
order by count(*) desc
limit 1;-- 21.查询出入职人数最多的年份
select year(entrydate) as '年份', count(*) as '总数'
from tb_emp
group by year(entrydate)
order by count(*) desc
limit 1;

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pdf转换成图片免费软件用哪个?pdf转换成图片就用它

随着技术的发展,现在企业办公运用到的电子文档各种各样,我们日常需要掌握的技能越来越高要求,其中pdf和图片是我们经常接触的文件格式之一,而且这两个文件格式我们会经常将它们进行转换,那么pdf转换成图片怎么操作呢?…

六、Kafka-Eagle监控

目录 6.1 MySQL 环境准备6.2 Kafka 环境准备6.3 Kafka-Eagle 安装 6.1 MySQL 环境准备 Kafka-Eagle 的安装依赖于 MySQL,MySQL 主要用来存储可视化展示的数据 6.2 Kafka 环境准备 修改/opt/module/kafka/bin/kafka-server-start.sh 命令 vim bin/kafka-server-sta…

鸿蒙系列-如何使用好 ArkUI 的 @Reusable?

如何使用好 ArkUI 的 Reusable? OpenHarmony 组件复用机制 在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为 系统组件,由开发者定义的称为 自定义组件。 在进行 UI 界面开发时,通常不是简单的将系统组件进行组合…

网站搭建最简化的引导操作 | 云服务器的购买选用 | 域名的选用 | 网站的上线和备案。

本文章面向对象为网站搭建的初次操作者,主要是一些自主使用的网站,为小白做为引导的教程。 一, 网站搭建的流程 1,服务器的租赁 2,购买域名 3,对域名进行备案 4,网站内部的搭建,上线…

音视频开发常用工具

文章目录 前言一、VLC 播放器1、简介2、下载3、VLC media player4、VLC 打开网络串流5、VLC 作为流媒体服务器①、搭建 RTSP 流媒体服务器②、新建播放器 二、MediaInfo1、简介2、下载3、MediaInfo①、主界面②、主要功能特点③、使用方法④、Mediainfo 相关参数和含义简介 三、…

uniapp热更新

首先热更新需要wgt包; 其次先了解这两个组件 下载的方法 安装的组件 场景: 当你项目的js文件或者页面文件或者静态图片文件css文件更新的时候可以走热更新; 而当你安装新的组件插件或者开启新的权限等功能的时候就无法通过热更新进行更新了…

数据结构入门 — 队列

本文属于数据结构专栏文章,适合数据结构入门者学习,涵盖数据结构基础的知识和内容体系,文章在介绍数据结构时会配合上动图演示,方便初学者在学习数据结构时理解和学习,了解数据结构系列专栏点击下方链接。 博客主页&am…

开发指导—利用CSS动画实现HarmonyOS动效(一)

注:本文内容分享转载自 HarmonyOS Developer 官网文档 一. CSS 语法参考 CSS 是描述 HML 页面结构的样式语言。所有组件均存在系统默认样式,也可在页面 CSS 样式文件中对组件、页面自定义不同的样式。请参考通用样式了解兼容 JS 的类 Web 开发范式支持的…

002图的基本概念与表示方法

文章目录 一. 图的组成二. 本体图2.1 什么是本体图2.2 怎么设计本体图 三. 图的种类3.1 按连接是否有向分3.2 按本体图分3.3 按连接是否带权重分 四. 节点连接数(节点的度)4.1 无向图节点的度4.2 有向图节点的度 五. 图的表示方法5.1 邻接矩阵5.2 连接列…

【ES6】Promise.all用法

Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。 const p Promise.all([p1, p2, p3]);上面代码中,Promise.all()方法接受一个数组作为参数,p1、p2、p3都是 Promise 实例,如果不是,就会先调…

新版Mongodb(6.0以上)找不到mongo.exe

安装目录下/bin目录中,没有mongo.exe文件,只有mongod和mongos,以及一个powershell命令脚本。 原因在于,mongodb6.0以后做出了重大改变,mongodb已经不再默认为你安装shell工具,因此需要安装一个额外的shell…

15年检测生涯转瞬即逝,复旦MBA助力邢国芒实现质量强国梦

日月光华,旦复旦兮!复旦MBA如同一个巨大的磁场,吸引了诸多来自五湖四海、各行各业的职场精英。从初入职场的青涩懵懂到如今的独当一面专业干练,他们逐渐成长为职场的中坚力量,在各自领域内发光发热。作为新时代的青年&…

算法:分治思想处理归并递归问题

文章目录 算法原理实现思路典型例题排序数组数组中的逆序对计算右侧小于当前元素的个数 总结 算法原理 利用归并思想进行分治也是很重要的一种思路,在解决逆序对的问题上有很大的需求空间 于是首先归并排序是首先的,归并排序要能写出来: c…

ubuntu上安装nginx

这篇文章主要介绍怎么在ubuntu上安装nginx服务器,并进行一些简单的配置。 第一步:准备好一台ubuntu操作系统的虚拟机 注意:如果你还没有安装好ubuntu,个人推荐阅读以下文章完成unbutu安装,vm的版本不用刻意安装文章中…

修改yum下载文件的位置,指定安装位置

yum update 的软件包,可以放在别的地方。即可。 修改/etc/yum.conf 指定安装位置 yum -c /etc/yum.conf --installroot/usr/local --releasever/ install 你需要安装的软件

软考:中级软件设计师:邮件加密系统,网络安全保障,网络威胁与攻击,防火墙技术

软考:中级软件设计师:邮件加密系统 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的 &…

2.2 Vector<T> 动态数组(模板语法)

C数据结构与算法 目录 本文前驱课程 1 C自学精简教程 目录(必读) 2 动态数组 Vector(难度1) 其中,2 是 1 中的一个作业。2 中详细讲解了动态数组实现的基本原理。 本文目标 1 学会写基本的C类模板语法; 2 为以后熟练使用 S…

Redis 缓存穿透、击穿、雪崩

一、缓存穿透 1、含义 缓存穿透是指查询一个缓存中和数据库中都不存在的数据,导致每次查询这条数据都会透过缓存,直接查库,最后返回空。 2、解决方案 1)缓存空对象 就是当数据库中查不到数据的时候,我缓存一个空对象…

C++--动态规划其他问题

1.一和零 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素&#xff0…

【数据结构】队列---C语言版(详解!!!)

文章目录 🐸一、队列的概念及结构🍄1、队列的概念定义🍄2、动图演示 🐸二、队列的实现🐸三、链表结构队列详解🍎创建队列的结构⭕接口1:定义结构体(QNode、Queue)⭕接口2…