【实用教程】MySQL内置函数

news2024/12/23 4:26:50

1 背景

在MySQL查询等操作过程中,我们需要根据实际情况,使用其提供的内置函数。今天我们就来一起来学习下这些函数,在之后的使用过程中更加得心应手。

2 MySQL函数

2.1 字符串函数

常用的函数如下:

concat(s1,s2,…sn)字符串拼接
lower(str)将字符串str全部转换为小写
upper(str)将字符串str全部转换为大写
lpad(str,n,pad)左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
rpad(str,n,pad)右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
trim(str)去掉字符串头部和尾部的空格
substr(str,start,len)截取从字符串str从start位置起的len个长度的字符串
concat(s1,s2,…sn)字符串拼接
lower(str)将字符串str全部转换为小写
## group_concat(…)函数用于将查询结果集中的多行数据连接成一个字符串

简单使用实例:

select concat('hello','world');

select lower('Hello');

select upper('hello');

select lpad('hello',10,'-');

select rpad('hello',10,'-');

select trim(' hello w ');  -- 从第一位开始截取,截取5位
select substr('hello world',1,5);`

使用场景:

由于业务需求变更,人员的id,统一为5位数,不足5位数的全部在前边补0,比如1的人员id需要修改为00001;

-- 使用lpad进行填充


select lpad(id, 5, '0') as id from user;

注意 concat 和group_concat的使用:

CONCAT 函数:CONCAT 函数用于连接两个或多个字符串。它接受任意数量的参数,将这些参数按顺序连接起来,并返回一个包含所有参数连接结果的字符串。例如:

SELECT CONCAT('Hello', ' ', 'World'); -- 输出: 'Hello World'

GROUP_CONCAT 函数:GROUP_CONCAT 函数用于将查询结果集中的多行数据连接成一个字符串。它通常与 GROUP BY 语句一起使用,用于将分组后的多行数据连接成一个字符串,每个分组的数据用指定的分隔符隔开。如:

SELECT GROUP_CONCAT(column_name SEPARATOR ', ') FROM table_name GROUP BY group_column;

在这个例子中,column_name 是需要连接的列,group_column 是分组的列,SEPARATOR 是用于分隔连接结果的字符串。

2.2 数值函数

常用的数值函数如下(在实际工作中使用较少):

ceil(x)向上取整
floor(x)向下取整
mod(x,y)返回x/y的模
rand()返回0~1内的随机数
round(x,y)求参数x的四舍五入的值,保留y位小数

2.3 日期函数

常用的日期函数如下:

curdate()返回当前日期
curtime()返回当前时间
now()返回当前日期和时间
year(date)获取指定date的年份
month(date)获取指定date的月份
day(date)获取指定date的日期
date_add(date,interval expr type)返回一个日期/时间值加上一个时间间隔expr后的时间值
datediff(date1,date2)返回起始时间date1和结束时间date2之间的天数
date_format(date, format)将日期格式化为指定格式

简单使用实例:

select curdate();
select curtime();  
select now();  
select year('2023-07-21 12:31:45');  
select month('2023-07-21 12:31:45');  
select day('2023-07-21 12:31:45');  
  
-- 获取当前时间往后推10年的时间  
select date_add(now(), interval 10 year);  
  
select datediff('2023-07-21 12:31:45', '2020-07-21 0:0:45');

date_format中一些常用的日期格式化符号:

  • %Y:四位年份(例如:2023)

  • %m:两位月份(01 到 12)

  • %d:两位日期(01 到 31)

  • %H:24小时制的小时(00 到 23)

  • %i:两位分钟(00 到 59)

  • %s:两位秒数(00 到 59)

如果你想将日期字段 order_date 格式化为 'YYYY-MM-DD' 的形式,你可以这样使用 DATE_FORMAT 函数

SELECT DATE_FORMAT(order_date, ‘%Y-%m-%d’) AS formatted_date FROM orders;

在这个查询中,order_date 会被格式化成 ‘YYYY-MM-DD’ 的形式,并且结果会以 formatted_date 的别名返回。

还可以使用 DATE_FORMAT 函数来处理日期时间字段,例如将日期时间字段格式化为 'YYYY-MM-DD HH:MM:SS' 的形式:

SELECT DATE_FORMAT(order_datetime, ‘%Y-%m-%d %H:%i:%s’) AS formatted_datetime FROM orders;

2.4 流程控制函数

常用的流程控制函数如下:

if(value, t, f)如果value为true,返回t,否则返回f
ifnull(value1, value2)如果value1不为空,返回value1,否则返回value2
case when [val1] then [res1] … else [default] end如果val1为true,返回res1,否则返回default默认值
case [expr] when [val1] then [res1] … else [default] end如果expr的值等于val1,返回res1,否则返回default默认值
select *,  
    if(city = '北京','bj','other')  
as city_name  
from user;  
  
  
select *,  
case when city = '北京' then 'bj'  
    else 'other'  
    end  
as city_name2  
from user;

3 其他注意

使用MySQL内置函数时,确实有一些需要注意的地方,特别是在处理大量数据时,可以影响查询的效率:

3.1 索引的使用:

  • 如果在查询条件中使用了函数,可能会导致索引无法使用。例如,WHERE YEAR(date_column) = 2023 中的YEAR()函数可能导致无法使用date_column上的索引。在可能的情况下,尽量避免在查询条件中使用数。

3.2 函数的嵌套:

  • 函数的嵌套使用可能会增加查询的复杂度。例如,嵌套了多层函数的查询可能会导致性能下降。在编写复杂查询时,确保函数的嵌套使用合理,不要过度复杂化查询。

3.3 数据类型转换:

  • 函数可能引发数据类型转换,这可能导致不必要的性能开销。例如,在字符串和数字之间进行转换可能会消耗一定的性能。在使用函数时,注意函数返回值的数据类型,尽量避免不必要的数据类型转换。

3.4 使用合适的函数:

  • 使用合适的函数能够提高查询的效率。例如,在字符串拼接时,使用CONCAT()函数通常比使用+运算符更高效。了解函数的具体功能和适用场景,选择合适的函数可以提高查询性能。

3.5 聚合函数的合理使用:

  • 当使用聚合函数(如SUM()、COUNT()等)时,注意是否需要在查询中使用GROUP BY语句。不合理的聚合函数使用可能导致结果不符合预期,也可能导致性能下降。

3.6 使用EXPLAIN语句分析查询计划:

  • 使用EXPLAIN语句可以分析查询的执行计划,了解MySQL是如何执行查询的。通过分析查询计划,可以发现是否有不合理的函数使用或索引未使用等问题,从而优化查询性能。

总之,合理使用MySQL内置函数是可以提高查询效率的,但在使用时需要根据具体情况选择合适的函数,同时,通过使用EXPLAIN语句分析查询计划,可以帮助你发现潜在的性能问题并进行优化。

关注我,我们一起学习。
在这里插入图片描述

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

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

相关文章

Ansible的安装和部署

目录 1.Ansible的安装 2.构建Ansible清单 直接书写受管主机名或ip 设定受管主机的组[组名称] 主机规格的范围化操作 指定其他清单文件 ansible命令指定清单的正则表达式 3.Ansible配置文件参数详解 配置文件的分类与优先级 常用配置参数 4.构建用户级Ansible操作环…

女神联盟2攻略,女神联盟2-GM红将全免

女神联盟2攻略:前期过渡阵容建议: 在女神联盟2-GM红将全免的初期玩法中,资源的获取是有限的,因此玩家需要合理运用搭配,避免浪费。同时在有限的资源中与敌人竞争资源需要进行头脑对决。首先,游戏中的硬通货…

Linux学习第27天:Platform设备驱动开发: 专注与分散

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 专注与分散是我在题目中着重说明的一个内容。这是今天我们要学习分离与分层概念的延伸。专注是说我们要专注某层驱动的开发,而对于其他层则是芯片厂商…

【QT】鼠标常用事件

新建项目 加标签控件 当鼠标进去,显示【鼠标进入】,离开时显示【鼠标离开】 将QLable提升成自己的控件,然后再去捕获 添加文件 改继承的类名 提升类 同一个父类,可以提升 效果 现在代码就和Qlabel对应起来了。 在.h中声明&…

1992-2021年全国各地级市经过矫正的夜间灯光数据(GNLD、VIIRS)

1992-2021年全国各地级市经过矫正的夜间灯光数据(GNLD、VIIRS) 1、时间:1992-2021年3月,其中1992-2013年为年度数据,2013-2021年3月为月度数据 2、来源:DMSP、VIIRS 3、范围:分区域汇总&…

短期经济波动:均衡国民收入决定理论(一

宏观经济学讲义 10 短期经济波动:均衡国民收入决定理论(一) 文章目录 10 短期经济波动:均衡国民收入决定理论(一)[toc]1 均衡国民收入决定1.1 均衡国民收入决定的不同理论1.2 两部门经济:有效需求原理和框架1.2.1 模型假设1.2.2 模型推导1.2…

正点原子嵌入式linux驱动开发——Linux 音频驱动

音频是最常用到的功能,音频也是linux和安卓的重点应用场合。STM32MP1带有SAI接口,正点原子的STM32MP1开发板通过此接口外接了一个CS42L51音频DAC芯片,本章就来学习一下如何使能CS42L51驱动,并且CS42L51通过芯片来完成音乐播放与录…

java八股文(基础篇)

面向过程和面向对象的区别 面向过程:在解决问题时,特别自定义函数编写一步一步的步骤解决问题。 面向对象:其特点就是 继承,多态,继承,在解决问题时,不再注重函数的编写,而在于注重…

EPLAN_012#自定义导航器

关键字:设备导航器、端子排导航器、电缆导航器、设备列表导航器,树形结构(导航器) 正常情况下,eplan中的设备导航器是这个模样 如何在导航器中显示更多内容或者进行规划。(比如下图中,可以显示其…

买车软件有哪些,买车软件哪个好

买车软件是指为购买汽车提供便利的手机应用程序,可以帮助消费者找到心仪的汽车型号、比较不同车型的价格、了解车辆的详细参数和配置、预约试驾、办理贷款、购车保险等一系列服务。 买车软件可以让用户更加便捷地了解汽车信息、比较不同车型的价格和配置、预约试驾…

【STL】:vector的模拟实现

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关vector的模拟实现,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 数…

qt 系列(一)---qt designer设计常用操作

最近转战qt, 主要用qt designer 进行GUI开发,记录下实战经验~ 1.前言 qt 是跨平台C图形用户界面应用程序开发框架,可以使用的IDE工具有 qt creator 和 vs, 这里我主要使用 Visual Studio 2017 工具进行程序开发与编写。 2. 环境配置 只写关键步骤~~ …

Java 谈谈你对OOM的认识

文章目录 前言一、基础架构二、常见OOM1、栈内存溢出java.lang.StackOverflowError2、堆内存溢出java.lang.OutOfMemoryError:Java heap space3、GC回收时间过长java.lang.OutOfMemoryError: GC overhead limit exceeded4、NIO程序堆外内存溢出java.lang.OutOfMemor…

MySQL使用存储过程迁移用户表数据,过滤用户名相同名称不同的用户

存储过程简介 存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。它是一段预编译的SQL…

openGauss学习笔记-110 openGauss 数据库管理-管理用户及权限-Schema

文章目录 openGauss学习笔记-110 openGauss 数据库管理-管理用户及权限-Schema110.1 创建、修改和删除Schema110.2 搜索路径 openGauss学习笔记-110 openGauss 数据库管理-管理用户及权限-Schema Schema又称作模式。通过管理Schema,允许多个用户使用同一数据库而不…

为什么 ConcurrentHashMap 中 key 不允许为 null

ConcurrentHashMap 在ConcurrentHashMap 的源码,在 put 方法里面,可以看到这样一段代码,如果 key 或者 value 为空,则抛出空指针异常。 但是为什么 ConcurrentHashMap 不允许 key 或者 value 为空呢? 原因 简单来说&…

macOS M1安装wxPython报错‘tiff.h‘ file not found的解决方法

macOS12.6.6 M1安装wxPython失败: 报错如下: imagtiff.cpp:37:14: fatal error: tiff.h file not found解决办法: 下载源文件重新编译(很快,5分钟全部搞定),分三步走: 第一步&…

Reading:Deep dive into the OnPush change detection strategy in Angular

原文连接:IndepthApp 今天深入阅读并总结Angualr中onPush更新策略。 1. 两种策略 & whats Lview? Angular 实现了两种策略来控制各个组件级别的更改检测行为。这些策略定义为Default和OnPush: 被定义为枚举: export enum…

IOC课程整理-3 Spring IoC 容器概述

1 Spring IoC依赖查找 延迟依赖查找主要用于获取 BeanFactory 后,不马上获取相关的 Bean,比如在 BeanFactoryPostProcessor 接口中获取 ConfigurableListableBeanFactory 时,不马上获取,降低 Bean 过早初始化的情况 2 Spring IoC…

redis缓存击穿,redisson分布式锁,redis逻辑过期

什么是缓存击穿: 缓存击穿是指在高并发环境下,某个热点数据的缓存过期,导致大量请求同时访问后端存储系统,引起系统性能下降和后端存储压力过大的现象。 解决方案: 1. redisson分布式锁 本质上是缓存重建的过程中&…