SQL命令详解之常用函数
目录
1 简介
2 字符串函数
2.1 字符串函数语法
2.2 字符串函数练习
3 数学函数
3.1 数学函数语法
3.2 数学函数练习
4 日期时间函数
4.1 日期时间函数语法
4.2 日期时间函数练习
5 条件函数
5.1 条件函数语法
5.2 条件函数练习
6 总结
1 简介
在SQL中我们经常会用到一些字符串、数学、日期时间和条件函数,下面通过多个实际案例演示了它们的应用。例如,如何截取字符串、转换大小写、计算平均值、处理日期差值等。此外,还包含SQL练习题,如筛选无效推文、修复用户名格式、计算学生平均成绩、查找温度上升的日期、统计活跃用户数等,帮助读者加深对SQL查询和数据处理的理解。
2 字符串函数
2.1 字符串函数语法
2.2 字符串函数练习
练习一:无效的推文
表:Tweets
+----------------+---------+
| Column Name | Type |
+----------------+---------+
| tweet_id | int |
| content | varchar |
+----------------+---------+
在 SQL 中,tweet_id 是这个表的主键。
content 只包含美式键盘上的字符,不包含其它特殊字符。
这个表包含某社交媒体 App 中所有的推文。查询所有无效推文的编号(ID)。当推文内容中的字符数严格大于 15 时,该推文是无效的。
以任意顺序返回结果表。
查询结果格式如下所示:示例 1:
输入:
Tweets 表:
+----------+----------------------------------+
| tweet_id | content |
+----------+----------------------------------+
| 1 | Vote for Biden |
| 2 | Let us make America great again! |
+----------+----------------------------------+输出:
+----------+
| tweet_id |
+----------+
| 2 |
+----------+
SQL:
SELECTtweet_id
FROMTweets
WHEREchar_length(content) > 15;
练习二:修复表中的名字
表: Users
+----------------+---------+
| Column Name | Type |
+----------------+---------+
| user_id | int |
| name | varchar |
+----------------+---------+
user_id 是该表的主键(具有唯一值的列)。
该表包含用户的 ID 和名字。名字仅由小写和大写字符组成。编写解决方案,修复名字,使得只有第一个字符是大写的,其余都是小写的。
返回按 user_id 排序的结果表。
返回结果格式示例如下。示例 1:
输入:
Users table:
+---------+-------+
| user_id | name |
+---------+-------+
| 1 | aLice |
| 2 | bOB |
+---------+-------+
输出:
+---------+-------+
| user_id | name |
+---------+-------+
| 1 | Alice |
| 2 | Bob |
+---------+-------+
SQL:
SELECTuser_id,concat(upper(substr(name, 1, 1)), lower(substr(name, 2))) AS name
FROMUsers;
3 数学函数
3.1 数学函数语法
3.2 数学函数练习
练习一:查询学生各科的平均成绩,四舍五入保留两位小数:
score 表:
+--------+--------+---------+
| s_name | c_name | s_score |
+--------+--------+---------+
| 赵雷 | 语文 | 80 |
| 赵雷 | 数学 | 90 |
| 赵雷 | 英语 | 99 |
| 钱电 | 语文 | 70 |
| 钱电 | 数学 | 60 |
| 钱电 | 英语 | 80 |
| 孙风 | 语文 | 80 |
| 孙风 | 数学 | 80 |
| 孙风 | 英语 | 80 |
| 李云 | 语文 | 50 |
| 李云 | 数学 | 30 |
| 李云 | 英语 | 20 |
| 周梅 | 语文 | 76 |
| 周梅 | 数学 | 87 |
| 吴兰 | 语文 | 31 |
| 吴兰 | 英语 | 34 |
| 郑竹 | 数学 | 89 |
| 郑竹 | 英语 | 98 |
+--------+--------+---------+
SQL:
mysql> select-> t.s_name,-> round(avg(t.s_score),2) as avg_score-> from (-> SELECT-> t2.s_name,-> t3.c_name,-> t1.s_score-> FROM-> score t1-> JOIN student t2 ON t1.s_id = t2.s_id-> JOIN Course t3 ON t1.c_id = t3.c_id-> ) t groupby t.s_name;
+--------+-----------+
| s_name | avg_score |
+--------+-----------+
| 赵雷 | 89.67 |
| 钱电 | 70.00 |
| 孙风 | 80.00 |
| 李云 | 33.33 |
| 周梅 | 81.50 |
| 吴兰 | 32.50 |
| 郑竹 | 93.50 |
+--------+-----------+
7 rows in set (0.01 sec)
4 日期时间函数
4.1 日期时间函数语法
4.2 日期时间函数练习
练习一:上升的温度
表: Weather
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| id | int |
| recordDate | date |
| temperature | int |
+---------------+---------+
id 是该表具有唯一值的列。
没有具有相同 recordDate 的不同行。
该表包含特定日期的温度信息编写解决方案,找出与之前(昨天的)日期相比温度更高的所有日期的 id 。
返回结果 无顺序要求 。
结果格式如下例子所示。示例 1:
输入:
Weather 表:
+----+------------+-------------+
| id | recordDate | Temperature |
+----+------------+-------------+
| 1 | 2015-01-01 | 10 |
| 2 | 2015-01-02 | 25 |
| 3 | 2015-01-03 | 20 |
| 4 | 2015-01-04 | 30 |
+----+------------+-------------+
输出:
+----+
| id |
+----+
| 2 |
| 4 |
+----+
解释:
2015-01-02 的温度比前一天高(10 -> 25)
2015-01-04 的温度比前一天高(20 -> 30)
SQL:
SELECTt1.id
FROMWeather t1,Weather t2
WHEREdatediff(t1.recordDate, t2.recordDate) = 1AND t1.Temperature > t2.Temperature;
练习二:查询近 30 天活跃用户数
表:Activity
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| user_id | int |
| session_id | int |
| activity_date | date |
| activity_type | enum |
+---------------+---------+
该表没有包含重复数据。
activity_type 列是 ENUM(category) 类型, 从 ('open_session', 'end_session', 'scroll_down', 'send_message') 取值。
该表记录社交媒体网站的用户活动。
注意,每个会话只属于一个用户。编写解决方案,统计截至 2019-07-27(包含2019-07-27),近 30 天的每日活跃用户数(当天只要有一条活动记录,即为活跃用户)。
以 任意顺序 返回结果表。
结果示例如下。示例 1:
输入:
Activity table:
+---------+------------+---------------+---------------+
| user_id | session_id | activity_date | activity_type |
+---------+------------+---------------+---------------+
| 1 | 1 | 2019-07-20 | open_session |
| 1 | 1 | 2019-07-20 | scroll_down |
| 1 | 1 | 2019-07-20 | end_session |
| 2 | 4 | 2019-07-20 | open_session |
| 2 | 4 | 2019-07-21 | send_message |
| 2 | 4 | 2019-07-21 | end_session |
| 3 | 2 | 2019-07-21 | open_session |
| 3 | 2 | 2019-07-21 | send_message |
| 3 | 2 | 2019-07-21 | end_session |
| 4 | 3 | 2019-06-25 | open_session |
| 4 | 3 | 2019-06-25 | end_session |
+---------+------------+---------------+---------------+
输出:
+------------+--------------+
| day | active_users |
+------------+--------------+
| 2019-07-20 | 2 |
| 2019-07-21 | 2 |
+------------+--------------+
解释:注意非活跃用户的记录不需要展示。
SQL:
SELECTt1.activity_date ASDAY,count(*) AS active_users
FROM(SELECT*FROMActivityWHEREdatediff(date('2019-07-27'), activity_date) < 30ANDdatediff(date('2019-07-27'), activity_date) >= 0GROUPBYactivity_date,user_id) t1
GROUPBYt1.activity_date
ORDERBYDAY;
5 条件函数
5.1 条件函数语法
5.2 条件函数练习
练习一:行转列,假设有一个成绩表scores
,包含student_id
(学生 ID)、subject
(科目)和score
(成绩)这 3 列,如下表所示:
student_id | subject | score |
---|---|---|
1 | 语文 | 80 |
1 | 数学 | 90 |
2 | 语文 | 75 |
2 | 数学 | 85 |
现在要将每个学生的各科成绩显示在一行中:
SELECTstudent_id,MAX(CASEWHEN subject = '语文'THEN scoreELSENULLEND) AS'语文成绩',MAX(CASEWHEN subject = '数学'THEN scoreELSENULLEND) AS'数学成绩'
FROMscores
GROUPBYstudent_id;
student_id | 语文成绩 | 数学成绩 |
---|---|---|
1 | 80 | 90 |
2 | 75 | 85 |
练习二:判断三角形
表: Triangle
+-------------+------+
| Column Name | Type |
+-------------+------+
| x | int |
| y | int |
| z | int |
+-------------+------+
在 SQL 中,(x, y, z)是该表的主键列。
该表的每一行包含三个线段的长度。对每三个线段报告它们是否可以形成一个三角形。
以 任意顺序 返回结果表。
查询结果格式如下所示。示例 1:
输入:
Triangle 表:
+----+----+----+
| x | y | z |
+----+----+----+
| 13 | 15 | 30 |
| 10 | 20 | 15 |
+----+----+----+
输出:
+----+----+----+----------+
| x | y | z | triangle |
+----+----+----+----------+
| 13 | 15 | 30 | No |
| 10 | 20 | 15 | Yes |
+----+----+----+----------+
SQL:
SELECTt.*,casewhent.x + t.y > t.z andt.x + t.z > t.y andt.z + t.y > t.xthen'Yes'else'No'endas triangle
FROMTriangle t;
6 总结
本文介绍了SQL中常用的字符串、数学、日期时间和条件函数,详细解释了它们的语法和使用方法。通过具体的示例,展示了如何操作字符串(如截取、转换大小写、去除空格、连接等)、进行数学运算(如四舍五入、计算平均值、取绝对值等)、处理日期时间(如计算日期差、日期加减、格式化日期等),以及如何使用条件函数进行逻辑判断(如CASE语句、IF语句等)。此外,文章还通过多个练习题帮助读者巩固所学知识,并提高SQL查询和数据处理的能力。这些函数和练习题不仅提升了SQL的应用技巧,还加深了对数据库操作的理解,适合各种数据分析和开发场景。
相关文章:

SQL命令详解之常用函数
目录 1 简介 2 字符串函数 2.1 字符串函数语法 2.2 字符串函数练习 3 数学函数 3.1 数学函数语法 3.2 数学函数练习 4 日期时间函数 4.1 日期时间函数语法 4.2 日期时间函数练习 5 条件函数 5.1 条件函数语法 5.2 条件函数练习 6 总结 1 简介 在SQL中我们经常会用…...

IndexError: index 0 is out of bounds for axis 1 with size 0
IndexError: index 0 is out of bounds for axis 1 with size 0 欢迎来到英杰社区,这里是博主英杰https://bbs.csdn.net/topics/617804998 报错原因 数组或数据结构为空 如果数组或 DataFrame 在指定的维度上没有任何元素(例如,没有列&#x…...

C++学习之C++初识、C++对C语言增强、对C语言扩展
一.C初识 1.C简介 2.第一个C程序 //#include <iostream> //iostream 相当于 C语言下的 stdio.h i - input 输入 o -output 输出 //using namespace std; //using 使用 namespace 命名空间 std 标准 ,理解为打开一个房间,房间里有我们所需…...
k8s面试题总结(八)
1.K8s部署服务的时候,pod一直处于pending状态,无法部署,说明可能的原因 Node节点的资源不足,yaml文件资源限制中分配的内存,cpu资源太大,node宿主机资源没那么大,导致无法部署。部署pod的yaml文…...
《今日-AI-编程-人工智能日报》
一、AI行业动态 荣耀发布“荣耀阿尔法战略” 荣耀在“2025世界移动通信大会”上宣布,将从智能手机制造商转型为全球领先的AI终端生态公司,并计划未来五年投入100亿美元建设AI设备生态。荣耀展示了基于GUI的个人移动AI智能体,并推出多款AI终端…...

Koupleless 2024 年度报告 2025 规划展望
Koupleless 2024 年度报告 & 2025 规划展望 赵真灵 (花名:有济) Koupleless 负责人 蚂蚁集团技术专家 Koupleless 社区的开发和维护者,曾负责基于 K8s 的应用研发运维平台、Node/Pod 多级弹性伸缩与产品建设,当前主…...
C与C++中inline关键字的深入解析与使用指南
文章目录 引言一、历史背景与设计哲学1.1 C中的inline1.2 C中的inline 二、核心机制对比2.1 编译行为2.2 链接模型2.3 存储类说明符(详细解析)C的灵活组合C的限制原理 补充说明: 三、典型应用场景3.1 C中的使用场景3.2 C中的使用场景 四、现代…...

记录linux安装mysql后链接不上的解决方法
首先确保是否安装成功 systemctl status mysql 如果没有安装的话,执行命令安装 sudo apt install mysql-server 安装完成后,执行第一步检测是否成功。 通常初始是没有密码的,直接登陆 sudo mysql -u root 登录后执行以下命令修改密码&…...

Java 大视界 -- Java 大数据在智能金融反欺诈中的技术实现与案例分析(114)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
01_NLP基础之文本处理的基本方法
自然语言处理入门 自然语言处理(Natural Language Processing, 简称NLP)是计算机科学与语言学中关注于计算机与人类语言间转换的领域,主要目标是让机器能够理解和生成自然语言,这样人们可以通过语言与计算机进行更自然的互动。 …...

(十 六)趣学设计模式 之 责任链模式!
目录 一、 啥是责任链模式?二、 为什么要用责任链模式?三、 责任链模式的实现方式四、 责任链模式的优缺点五、 责任链模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,…...

动态规划/贪心算法
一、动态规划 动态规划 是一种用于解决优化问题的算法设计技术,尤其适用于具有重叠子问题和最优子结构性质的问题。它通过将复杂问题分解为更简单的子问题,并保存这些子问题的解以避免重复计算,从而提高效率。 动态规划的核心思想 最优子结…...

PH热榜 | 2025-03-04
1. MGX 标语:第一支人工智能开发团队 介绍:MGX(MetaGPT X)是一个基于真实软件标准操作程序(SOP)的多代理人工智能平台。在这里,你可以随时与AI团队的领导、产品经理、架构师、工程师和数据分析…...
Mybatis-Plus 插件机制与自定义插件实现
1. Mybatis-Plus 插件系统概述 Mybatis-Plus 提供了一个简单而强大的插件机制,允许开发者在 MyBatis 执行 SQL 的过程中插入自定义逻辑。通过插件机制,用户可以实现对 SQL 执行过程的拦截和修改。Mybatis-Plus 插件基于 MyBatis 的拦截器模式进行实现&a…...

开源表单、投票、测评平台部署教程
填鸭表单联合宝塔面板深度定制,自宝塔面板 9.2 版本开始,在宝塔面板-软件商店中可以一键部署填鸭表单系统。 简单操作即可拥有属于自己的表单问卷系统,快速赋能业务。即使小白用户也能轻松上手。 社区版体验地址:https://demo.tduckapp.com/home 前端项目地址: tduck-fro…...

行为模式---命令模式
概念 命令模式是一种行为设计模式,它的核心思想就是将请求封装为一个对象,此对象包含与请求相关的所有信息。可以用不同的请求对客户进行参数化。命令模式通过将请求的发送者和接收者解耦,支持请求的排队、记录、撤销等操作。 使用场景 1、…...

zabbix配置邮件告警
目录 实现步骤: 实现目的: 1.在监控端操作: 2.web界面部署 实现步骤: 1、在 zabbix服务端配置邮件发送脚本和修改 zabbix服务端配置文件; 2、在 zabbix前端控制台进行相关设置。 实现目的: Zab…...
INI和CSV文件保存
INI文件 INI文件是一种配置文件格式,通常用于Windows操作系统中的应用程序中。 它是一种文本文件,由多个节和键值对组成,用于存储应用程序的配置信息。 INI文件的特点包括: INI文件是一种文本文件,易于编辑和阅读。…...

汽车智能钥匙中PKE低频天线的作用
PKE(Passive Keyless Entry)即被动式无钥匙进入系统,汽车智能钥匙中PKE低频天线在现代汽车的智能功能和安全保障方面发挥着关键作用,以下是其具体作用: 信号交互与身份认证 低频信号接收:当车主靠近车辆时…...

计算机等级考试
一、计算机等级考试——题库 (1)选择题 (2)基本操作题 (3)上网题 (4)文字题 (5)表格题 (6)演示文稿题 二、计算机等级考试——标准评…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
FOPLP vs CoWoS
以下是 FOPLP(Fan-out panel-level packaging 扇出型面板级封装)与 CoWoS(Chip on Wafer on Substrate)两种先进封装技术的详细对比分析,涵盖技术原理、性能、成本、应用场景及市场趋势等维度: 一、技术原…...

Appium下载安装配置保姆教程(图文详解)
目录 一、Appium软件介绍 1.特点 2.工作原理 3.应用场景 二、环境准备 安装 Node.js 安装 Appium 安装 JDK 安装 Android SDK 安装Python及依赖包 三、安装教程 1.Node.js安装 1.1.下载Node 1.2.安装程序 1.3.配置npm仓储和缓存 1.4. 配置环境 1.5.测试Node.j…...

Linux操作系统共享Windows操作系统的文件
目录 一、共享文件 二、挂载 一、共享文件 点击虚拟机选项-设置 点击选项,设置文件夹共享为总是启用,点击添加,可添加需要共享的文件夹 查询是否共享成功 ls /mnt/hgfs 如果显示Download(这是我共享的文件夹)&…...

EEG-fNIRS联合成像在跨频率耦合研究中的创新应用
摘要 神经影像技术对医学科学产生了深远的影响,推动了许多神经系统疾病研究的进展并改善了其诊断方法。在此背景下,基于神经血管耦合现象的多模态神经影像方法,通过融合各自优势来提供有关大脑皮层神经活动的互补信息。在这里,本研…...