字符串函数

1. 字符串拼接concat
-- 拼接字符串'hello'和'mysql',结果为'hellomysql'
-- 格式:concat(str1, str2, ...):拼接多个字符串
select concat('hello', 'mysql');

注意事项:若任一参数为null,结果为null(如concat('a', null)返回null)。

2. 大小写转换lower/upper
-- 将字符串'HElLO'转为全小写,结果为'hello'
select lower('HElLO');-- 将字符串'hello'转为全大写,结果为'HELLO'
select upper('hello');

注意事项:仅对字母有效,非字母字符不处理(如lower('123A')返回'123a')。

3. 填充函数lpad/rpad
-- 左填充:将'01'用'-'填充至长度5,结果为'---01'
-- 格式:lpad(str, length, padstr):从左侧用padstr填充str至指定长度
select lpad('01', 5, '-');-- 右填充:将'02'用'*'填充至长度5,结果为'02***'
-- 格式:rpad(str, length, padstr):从右侧用padstr填充str至指定长度
select rpad('02', 5, '*');

注意事项

  • 若原字符串长度大于指定length,会截断超出部分(如lpad('12345', 3, '0')返回'123');
  • padstr可为空,但无实际意义。
4. 去除空格trim
-- 去除字符串前后的空格(默认行为),结果为'HElLO mysql *'
-- 格式:trim(str):去除str头部和尾部的空格;也可指定去除字符(如trim('*' from '**abc**')返回'abc')
select trim(' HElLO mysql *');

注意事项:仅去除头部和尾部的指定字符,中间的不处理(如trim(' a b c ')返回'a b c')。

5. 截取子串substring
-- 从第1个字符开始,截取7个字符,结果为'HElLO m'
-- 格式:substring(str, start, length):start为起始位置(从1开始),length为截取长度
select substring('HElLO mysql', 1, 7);

注意事项

  • 起始位置start为负数时,表示从尾部开始计算(如substring('abcde', -3, 2)返回'cd');
  • length超出字符串长度,返回从start到结尾的所有字符。

练习:表数据更新(结合字符串函数)

-- 查看emp表所有数据(用于对比更新前后的workno字段)
select * from emp;-- 更新emp表的workno字段:用lpad函数将workno左填充0至5位
-- 例如原workno为'1',更新后为'00001';原workno为'10',更新后为'00010'
update emp set workno = lpad(workno, 5, 0);

注意事项:更新操作需谨慎,建议先备份数据或用select验证函数结果(如select lpad(workno,5,0) from emp)。

数值函数

1. 向上取整ceil
-- 向上取整:1.1的向上取整结果为2
-- 格式:ceil(x):返回大于等于x的最小整数
select ceil(1.1); -- 结果:2

注意事项:对负数同样生效(如ceil(-1.1)返回-1)。

2. 向下取整floor
-- 向下取整:-0.5的向下取整结果为-1(取小于等于该数的最大整数)
select floor(-0.5); -- 结果:-1

注意事项:与ceil相反,floor(1.9)返回1floor(-1.1)返回-2

3. 取余数mod
-- 取余数:-9.5除以2的余数,结果为-1.5(余数符号与被除数一致)
-- 格式:mod(x, y):等价于x % y
select mod(-9.5, 2); -- 结果:-1.5

注意事项:若y为 0,返回null(除数不能为 0)。

4. 随机数rand
-- 生成0-1之间的随机浮点数(包含0,不包含1)
select rand(); -- 示例结果:0.847539276155328

注意事项:每次调用结果不同;若需固定随机序列,可传入种子(如rand(1),相同种子生成相同序列)。

5. 四舍五入round
-- 四舍五入:3.55936412保留5位小数,结果为3.55936
-- 格式:round(x, d):x为数值,d为保留的小数位数(默认d=0,即取整数)
select round(3.55936412, 5); -- 结果:3.55936

注意事项d为负数时,对整数部分四舍五入(如round(123.45, -1)返回120)。

练习:生成 6 位随机验证码
-- 方式1:从rand()生成的随机数中截取第3位开始的6个字符(rand()格式为0.xxxxxx...)
-- 例如rand()=0.123456789,substring从第3位取6位,结果为'123456'
select substring(rand(), 3, 6);-- 方式2:生成0-1000000的随机整数,再用lpad左填充0至6位(确保是6位数)
-- round(rand()*1000000,0)生成0-1000000的整数,lpad确保不足6位时补0
select lpad(round(rand() * 1000000, 0), 6, 0);

注意事项

  • 方式 1 可能因rand()小数位数不足导致结果短于 6 位(如rand()=0.1234,结果为 '1234');
  • 方式 2 更可靠,确保始终返回 6 位数字(包括补 0 的情况)。

日期函数

1. 获取当前日期 / 时间
-- 获取当前日期(格式:YYYY-MM-DD)
select curdate(); -- 示例结果:2025-09-13-- 获取当前时间(格式:HH:MM:SS)
select curtime(); -- 示例结果:15:30:45-- 获取当前日期时间(格式:YYYY-MM-DD HH:MM:SS)
select now(); -- 示例结果:2025-09-13 15:30:45

注意事项now()返回的是 SQL 语句开始执行的时间,而非函数调用时的时间(若语句执行耗时较长)。

2. 提取日期部分
-- 提取当前日期的年份
select year(now()); -- 示例结果:2025-- 提取当前日期的月份
select month(now()); -- 示例结果:9-- 提取当前日期的日
select day(now()); -- 示例结果:13

注意事项:参数需为日期 / 时间类型,若为字符串需符合日期格式(如year('2024-05-10')返回2024)。

3. 日期加减date_add
-- 计算当前日期加79天后的日期
-- 格式:date_add(date, interval 数值 单位),单位可为day、month、year等
select date_add(now(), interval 79 day ); -- 示例结果:2025-12-01 15:30:45

注意事项

  • 单位需正确(如interval 1 month表示加 1 个月);
  • 减日期可用date_sub(如date_sub(now(), interval 1 day))。
4. 日期差datediff
-- 计算当前日期与'2024-01-01'的天数差(结果=当前日期 - 目标日期)
-- 格式:datediff(end_date, start_date):返回两个日期之间的天数
select datediff(now(), '2024-01-01'); -- 示例结果:620(假设间隔620天)

注意事项

  • 仅计算日期部分,忽略时间(如datediff('2024-01-02 23:59', '2024-01-01 00:00')返回1);
  • end_date < start_date,结果为负数。

练习:表查询(结合日期函数)

-- 查看emp表所有数据(用于对比)
select * from emp;-- 查询员工的入职天数和姓名,并按入职天数倒序排序
-- datediff(curdate(), entrydate):计算当前日期与入职日期的天数差(即入职天数)
-- order by 入职天数 desc:按入职天数从大到小排序(最老员工在前)
select datediff(curdate(), entrydate) '入职天数', name from emp order by 入职天数 desc ;

注意事项

  • entrydate需为date类型,否则datediff可能返回null
  • 排序时可直接使用别名(如order by 入职天数),无需重复写函数。

总结:函数通用注意事项

  1. 参数类型需匹配:如日期函数需传入日期 / 时间类型,字符串函数需传入字符串类型,否则可能返回null或错误;
  2. 边界值处理:如lpad/rpad的长度小于原字符串时会截断,substring的起始位置超出字符串长度时返回空;
  3. 性能影响:聚合函数、复杂字符串 / 日期函数在大数据量下可能影响查询效率,建议合理使用索引或限制查询范围;
  4. 兼容性:部分函数(如mysql_native_password)在不同 MySQL 版本中行为可能不同,需注意版本兼容。

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

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

相关文章

JAVA高级工程师--Redis持久化详细版

一、Redis DBRedis 数据库的数量在单机和集群模式下有根本性的区别。1. 单机模式 (Standalone)在单机模式下&#xff0c;Redis 默认提供 16 个逻辑数据库&#xff0c;索引编号为 0 到 15。选择数据库&#xff1a; 使用 SELECT <index> 命令进行切换。例如&#xff0c;SE…

hexo文章

文章目录Tag的使用勾选框图片的组合站内文章引用注意&#xff1a;1、关于中括号的问题目录总结 Tag的使用 在 markdown 中加入如下的代码来使用便签&#xff1a; {% note success %} 文字 或者 markdown 均可 {% endnote %}或者使用 HTML 形式&#xff1a; <p class&quo…

技术面:Spring (bean的生命周期、创建方式、注入方式、作用域)

Spring Bean的生命周期是什么样的&#xff1f; 在Spring容器里一个Bean的从创建到销毁一般都是经历了以下几个阶段&#xff1a; 定义阶段&#xff08;Bean元信息配置&#xff09;>实例化阶段&#xff08;创建Bean对象&#xff09;>初始化阶段&#xff08;执行初始化逻辑&…

SpringSecurity的应用

官方文档 一、核心能力 1.1 身份认证 (Authentication) - “你是谁&#xff1f;” 多种认证方式&#xff1a;支持几乎所有主流认证方案&#xff0c;如表单登录&#xff08;Username/Password&#xff09;、HTTP Basic、HTTP Digest、OAuth 2.0、OIDC (OpenID Connect)、SAML …

跨境云手机与传统手机的不同之处

传统手机主要满足个人日常生活中的通讯、娱乐、办公等基础需求&#xff0c;比如用于日常打电话联系亲朋好友&#xff0c;闲暇时刷短视频、玩本地安装的游戏&#xff0c;或者简单处理一些文档、邮件等办公事务。跨境云手机主要是侧重于跨境业务场景&#xff0c;对于从事跨境电商…

MemGPT: Towards LLMs as Operating Systems

1 MemGPT: Towards LLMs as Operating Systems 论文地址&#xff1a;MemGPT: Towards LLMs as Operating Systems 代码地址&#xff1a;https://github.com/letta-ai/letta 1.1 MemGPT MemGPT&#xff08;MemoryGPT&#xff09;借鉴传统操作系统的分层内存管理思想&#xff08;…

MICAPS:气象信息综合分析与处理系统概述

1.概述 说明:Meteorological Information Comprehensive Analysis and Process System 中文意思:气象信息综合分析处理系统。它是中国气象局开发的一套气象数据分析、处理和可视化系统,用于气象资料的收集、整理、分析和发布。 2.MICAPS 的用途 说明: 数据收集:接收来自…

MySQL-day2_02

MySQL-day2&#xff08;四&#xff09;排序&#xff08;五&#xff09;聚合函数一、count 总记录数二、max 最大值三、min 最小值四、sum 求和五、avg 平均值&#xff08;六&#xff09;数据分组一、分组二、分组后的数据筛选&#xff08;七&#xff09;数据分页显示一、获取部…

HarmonyOS应用开发:深入ArkUI声明式开发范式与最佳实践

HarmonyOS应用开发&#xff1a;深入ArkUI声明式开发范式与最佳实践 引言 随着HarmonyOS 4.0的发布及API 12的推出&#xff0c;华为的分布式操作系统进入了全新的发展阶段。ArkUI作为HarmonyOS应用开发的核心框架&#xff0c;其声明式开发范式&#xff08;Declarative Paradigm&…

Claude-Flow AI协同开发:钩子系统与 GitHub 集成

5.1 思维认知框架&#xff1a;从“开发助手”到“DevOps 智能体” 在此之前&#xff0c;我们将 Claude-Flow 视为一个强大的 “开发助手 (Development Assistant)” &#xff0c;它在编码、测试、重构等环节为我们提供支持。现在&#xff0c;我们需要再次进行思维升级&#xff…

DigitalOcean Kubernetes 现已支持 Gateway API 托管服务

在 DigitalOcean Kubernetes 集群中管理流量&#xff0c;一直以来主要依赖 Ingress。虽然能满足基本需求&#xff0c;但在灵活性、角色分离和高级路由方面仍存在局限。今天&#xff0c;我们很高兴迎来新的改变。 我们正式宣布&#xff0c;Kubernetes Gateway API 托管服务现已…

聚铭网络入选数世咨询《中国数字安全价值图谱》“日志审计”推荐企业

近日&#xff0c;国内知名数字安全咨询机构数世咨询正式发布《中国数字安全价值图谱》。聚铭网络凭借领先的技术实力与出色的市场表现&#xff0c;成功入选“日志审计”领域重点推荐企业&#xff0c;彰显了在该赛道的专业认可与品牌影响力。关于《中国数字安全价值图谱》 在当下…

豆包、Kimi、通义千问、DeepSeek、Gamma、墨刀 AI”六款主流大模型(或 AI 平台)生成 PPT 的完整流程

、先厘清 3 个概念&#xff0c;少走弯路大模型 ≠ PPT 软件豆包、Kimi、通义千问、DeepSeek 本身只负责“出大纲/出文案”&#xff0c;真正的“一键配图排版”要靠官方 PPT 助手或第三方平台&#xff08;博思 AiPPT、迅捷 AiPPT、Gamma、墨刀 AI 等&#xff09;。两条主流技术路…

Redis哈希(Hash):适合存储对象的数据结构,优势与坑点解析

Redis哈希&#xff08;Hash&#xff09;&#xff1a;适合存储对象的数据结构&#xff0c;优势与坑点解析 1. Redis哈希概述 1.1 什么是Redis哈希 Redis哈希&#xff08;Hash&#xff09;是一种映射类型&#xff08;Map&#xff09;&#xff0c;由多个字段值对&#xff08;fi…

Python的uv包管理工具使用

一、简介 uv是一个继Python版本管理、Python包管理、项目管理、虚拟环境管理于一体的工具&#xff0c;由于底层是用Rust编写的&#xff0c;uv的执行速度非常快。 安装 pip install uv镜像源设置 uv默认安装包是从pypi上下载的&#xff0c;速度比较慢。我们可以设置镜像源&#…

JavaScript事件机制与性能优化:防抖 / 节流 / 事件委托 / Passive Event Listeners 全解析

目标&#xff1a;把“为什么慢、卡顿从哪来、该怎么写”一次说清。本文先讲事件传播与主线程瓶颈&#xff0c;再给出四件法宝&#xff08;防抖、节流、事件委托、被动监听&#xff09;&#xff0c;最后用一套可复制的工具函数 清单收尾。1&#xff09;先理解“为什么会卡”&am…

【Chrome】chrome 调试工具的network选项卡,如何同时过滤出doc js css

通过类型按钮快速筛选&#xff08;更直观&#xff09;在 Network 选项卡中&#xff0c;找到顶部的 资源类型按钮栏&#xff08;通常在过滤器搜索框下方&#xff09;。按住 Ctrl 键&#xff08;Windows/Linux&#xff09;或 Command 键&#xff08;Mac&#xff09;&#xff0c;同…

Elasticsearch (ES)相关

在ES中&#xff0c;已经有Term Index&#xff0c;那还会走倒排索引吗 你这个问题问得很到位 &#x1f44d;。我们分清楚 Term Index 和 倒排索引 在 Elasticsearch (ES) 里的关系&#xff1a;1. 倒排索引&#xff08;Inverted Index&#xff09; 是 Lucene/ES 检索的核心。文档…

pre-commit run --all-files 报错:http.client.RemoteDisconnected

报错完整信息初步原因是这样 报错是 Python 的 http.client.RemoteDisconnected&#xff0c;意思是 在用 urllib 请求远程 URL 时&#xff0c;远程服务器直接断开了连接&#xff0c;没有返回任何响应。在你的堆栈里&#xff0c;它出现在 pre-commit 尝试安装 Golang 环境的时候…

【C++】STL·List

1. list的介绍及使用 1.1list介绍 List文档介绍 1.2 list的使用 list中的接口比较多&#xff0c;此处类似&#xff0c;只需要掌握如何正确的使用&#xff0c;然后再去深入研究背后的原理&#xff0c;已 达到可扩展的能力。以下为list中一些常见的重要接口。 1.2.1 list的构造…