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 job
            when 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.mfbz.cn/a/99992.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java 浅谈ThreadLocal底层源码(通俗易懂)

目录 一、ThreadLocal类基本介绍 1.概述 : 2.作用及特定 : 二、ThreadLocal类源码解读 1.代码准备 : 1.1 图示 1.2 数据对象 1.3 测试类 1.4 运行测试 2.源码分析 : 2.1 set方法解读 2.2 get方法解读 一、ThreadLocal类基本介绍 1.概述 : (1) ThreadLocal,本…

Maven基础的快速入门

导读 概念:Maven是apache旗下的一个开源项目,是一款用于管理和构建Java项目的工具 Maven的作用: 1.依赖管理:放便快捷的管理项目依赖的资源(jar包),避免版本冲突的问题 2.统一项目结构&…

关于CICD流水线的前端项目运行错误,npm项目环境配置时出现报错:Not Found - GET https://registry.npm...

关于CICD流水线的前端项目运行错误,npm项目环境配置时出现报错:Not Found - GET https://registry.npm… 原因应该是某些jar包缓存中没有需要改变镜像将包拉下来 npm config set registry http://registry.npm.taobao.org npm install npm run build

Matlab图像处理-灰度分段线性变换

灰度分段线性变换 如数学涵义的分段一般,分段线性变换就是将图像不同的灰度范围进行不同的线性灰度处理。其表达式可表示如下: 灰度分段线性变换可根据需求突出增强目标区域,而不增强非目标区间,达到特定的显示效果。 示例程序 …

疑问:相同Service ID、不同Instance ID的SOME/IP服务如何被使用?

这是我的一个疑问,向各位朋友请教,请帮忙留意回复一下,感谢! 在SOME/IP中,Service ID是用来识别和标记哪个服务,Instance ID是用来识别和标记某个服务的哪个实例。 既然是相同的服务,这个服务…

虚拟机安装aix 7.2

虚拟机安装aix 7.2 环境安装参考 环境 kali 2023 aix7.2镜像 https://archive.org/details/aix_7200-04-02-2027_072020安装 apt install qemu-system qemu-img create -f qcow2 aix-hdd.qcow2 20G qemu-system-ppc64 -cpu POWER8 -machine pseries -m 4G -serial mon:stdio…

nepctf2023 部分web复现

目录 <1> EZJAVA_CHECKIN(shiro550) <2> 独步天下-转生成为镜花水月中的王者(环境变量提权) <3> 独步天下-破除虚妄_探见真实(Venom代理&ping%0a绕过rce&c文件描述符未关闭连接父进程修改文件权限) <4> 独步天下-破除试炼_加冕成王(tp6rceu…

go学习part21(3)redis连接池

连接池 1.介绍 每次使用数据就就建立链接再关闭可以&#xff0c;但是如果有大量客户端频繁请求连接&#xff0c;大量创建连接和关闭会非常耗费资源。 所以就建立一个连接池&#xff0c;里面存放几个不关闭的连接&#xff0c;谁要用就分配给谁。 说明:通过Golang 对 Redis操…

大数据-玩转数据-Flink 水印

一、Flink 中的水印 在Flink的流式操作中, 会涉及不同的时间概念&#xff1a; 1.1 处理时间 是指的执行操作的各个设备的时间&#xff0c;对于运行在处理时间上的流程序, 所有的基于时间的操作(比如时间窗口)都是使用的设备时钟。比如, 一个长度为1个小时的窗口将会包含设备…

Uncaught ReferenceError: process is not defined

最近在搞老项目升级,将Vue2.6.11里的vuecli5.0.8升级到vite最新版本4.4.9&#xff0c;中间遇到不少问题&#xff0c;有机会以后做记录。 遇到问题 把所有的工作就搞好项目也成功的跑起来&#xff0c;页面一片空白。打开控制台 Uncaught ReferenceError: process is not defi…

hive部署

下载hive安装包&#xff1a;https://dlcdn.apache.org/hive/hive-2.3.9/解压及环境部署 tar -zxvf apache-hive-2.3.9-bin.tar.gz mv apache-hive-2.3.9-bin hivevim /etc/profile添加至环境变量 export HIVE_HOME/usr/local/hive export PATH$PATH:$HIVE_HOME/binsource /etc…

单片机电子元器件-按键

电子元器件 按键上有 四个引脚 1 2 、 3 4 按下之后 导通 1 3 、 2 4 初始导通 通常按键开关为机械弹性开关&#xff0c;开关在闭合不会马上稳定的接通&#xff0c;会有一连串的抖动 抖动时间的长短有机械特性来决定的&#xff0c;一般为5ms 到10 ms 。 消抖的分类 硬件消…

python爬取bilibili,下载视频

一. 内容简介 python爬取bilibili&#xff0c;下载视频 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 2.3代码 链接&#xff1a;https://pan.baidu.com/s/1WuXTso_iltLlnrLffi1kYQ?pwd1234 三.主要流程 3.1 下载单个视频 代码 import requests impor…

如何使用ArcGIS Earth制作地图动画视频

通常情况下&#xff0c;我们所看到的地图都是静态展示&#xff0c;对于信息的传递&#xff0c;视频比图片肯定会更加丰富&#xff0c;所以制作地图动画视频更加有利于信息的传递&#xff0c;这里我们讲解一下ArcGIS Earth 2.0如何制作地图动画视频&#xff0c;希望能对你有所帮…

pytest---添加自定义命令行参数(pytest_addoption )

前言 在目前互联网公司中&#xff0c;都会存在多个测试环境&#xff0c;那么当我们编写的自动化想要在多套测试环境下进行运行时&#xff0c;如何使用&#xff1f;大多数人想到的可能是通过将我们自动化代码中的地址修改成不同环境&#xff0c;但是这时候就会增加一些工作量&am…

MySQL以及版本介绍

一、MySQL的介绍 MySQL数据库管理系统由瑞典的DataKonsultAB公司研发&#xff0c;该公司被Sun公司收购&#xff0c;现在Sun公司又被Oracle公司收购&#xff0c;因此MySQL目前属于 Oracle 旗下产品。 MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用…

DEAP库文档教程五----计算统计

本小结将重点围绕模型在计算统计方面的问题&#xff0c;进行详细的论述 1、Computing Statistics 通常情况下&#xff0c;我们想要在优化过程中编辑数据。Statistic模块可以在任何设计好的目标上改变一些本不可改变的数据。为了达到这个目的&#xff0c;需要使用与工具箱中完…

企业数字化转型的关键技术有哪些?_光点科技

随着科技的不断进步和信息技术的快速发展&#xff0c;企业数字化转型已经成为保持竞争力和适应市场变化的关键举措。在这个数字化时代&#xff0c;企业需要借助先进的技术来优化业务流程、提升效率&#xff0c;以及更好地满足客户需求。以下是企业数字化转型过程中的关键技术。…

Modbus转Profinet网关在大型自动化仓储项目应用案例

在自动化仓储项目中&#xff0c;Modbus是一种常见的通信协议&#xff0c;用于连接各种设备&#xff0c;例如传感器、PLC和人机界面。然而&#xff0c;Modbus协议只支持串行通信&#xff0c;并且数据传输速度较慢。为了提高通信效率和整体系统性能&#xff0c;许多大型仓储项目选…

Docker环境搭建Prometheus实验环境

环境&#xff1a; OS&#xff1a;Centos7 Docker: 20.10.9 - Community Centos部署Docker 【Kubernetes】Centos中安装Docker和Minikube_云服务器安装docker和minikube_DivingKitten的博客-CSDN博客 一、拉取Prometheus镜像 ## 拉取镜像 docker pull prom/prometheus ## 启动p…