零基础学习SQL(五)——函数详解

在 SQL 数据处理中,函数是提升效率的关键工具。它们能够对数据进行转换、计算和逻辑判断,让复杂的操作变得简洁高效。

字符串函数:数据格式化的利器

字符串函数主要用于处理文本类型的数据,在数据清洗、格式统一和信息提取中发挥重要作用。

函数 功能
CONCAT(s1, s2, ..., sn) 字符串拼接,将 s1, s2, ..., sn 拼接成一个字符串
LOWER(str) 将字符串全部转为小写
UPPER(str) 将字符串全部转为大写
LPAD(str, n, pad) 左填充,用字符串 pad 对 str 的左边进行填充,达到 n 个字符串长度
RPAD(str, n, pad) 右填充,用字符串 pad 对 str 的右边进行填充,达到 n 个字符串长度
TRIM(str) 去掉字符串头部和尾部的空格
SUBSTRING(str, start, len) 返回从字符串 str 从 start 位置起的 len 个长度的字符串
REPLACE(column, source, replace) 替换字符串

CONCAT 函数用于将多个字符串拼接成一个整体。例如,在员工信息表中,若需要将姓和名合并为完整姓名,可使用SELECT CONCAT(last_name, first_name) AS full_name FROM employees;。该函数在生成报表标题、组合地址信息等场景中频繁使用。

LOWER 和 UPPER 函数分别将字符串转为全小写和全大写。在用户注册系统中,为避免因大小写差异导致的重复账户,可通过SELECT LOWER(username) FROM user_registrations;统一用户名格式。

LPAD 和 RPAD 函数实现字符串的填充功能。以订单编号处理为例,若需将短编号统一为 8 位长度,可使用SELECT LPAD(order_id, 8, '0') AS formatted_id FROM orders;,这样 "123" 就会变成 "00000123",便于数据排序和展示。

TRIM 函数用于去除字符串首尾的空格。在处理用户输入的搜索关键词时,SELECT TRIM(search_term) FROM user_searches;能避免因误输入空格导致的查询结果偏差。

SUBSTRING 函数可从字符串中截取指定长度的子串。比如从身份证号码中提取出生年份,SELECT SUBSTRING(id_card, 7, 4) AS birth_year FROM residents;就能快速获取相关信息。

REPLACE 函数用于替换字符串中的特定内容。当需要统一产品名称中的 "公司" 为 " Corp" 时,SELECT REPLACE(product_name, '公司', ' Corp') FROM products;能批量完成修改。

数值函数:精准计算的保障

数值函数专注于数学运算,在金融分析、数据统计等领域不可或缺。

函数 功能
CEIL(x) 向上取整
FLOOR(x) 向下取整
MOD(x, y) 返回 x/y 的模
RAND() 返回 0~1 内的随机数
ROUND(x, y) 求参数 x 的四舍五入值,保留 y 位小数

CEIL 和 FLOOR 函数分别实现向上取整和向下取整。在计算包裹运费时,若按重量向上取整收费,SELECT CEIL(weight) AS charged_weight FROM packages;可确保费用计算准确。

MOD 函数返回两个数相除的余数,常用于判断数字的奇偶性,如SELECT MOD(number, 2) AS is_odd FROM numbers;,结果为 1 表示奇数,0 表示偶数。

RAND 函数生成 0 到 1 之间的随机数,在抽样调查中非常实用。例如从客户列表中随机选取 10% 的样本,SELECT * FROM customers WHERE RAND() < 0.1;就能快速实现。

ROUND 函数对数值进行四舍五入并保留指定小数位数。在处理商品价格时,SELECT ROUND(price, 2) AS rounded_price FROM products;可将价格统一保留两位小数,符合货币展示规范。

日期函数:时间维度的数据分析

日期函数用于处理时间相关数据,为基于时间的分析提供支持。

函数 功能
CURDATE() 返回当前日期
CURTIME() 返回当前时间
NOW() 返回当前日期和时间
YEAR(date) 获取指定 date 的年份
MONTH(date) 获取指定 date 的月份
DAY(date) 获取指定 date 的日期
DATE_ADD(date, INTERVAL expr type) 返回一个日期 / 时间值加上一个时间间隔 expr 后的时间值
DATEDIFF(date1, date2) 返回起始时间 date1 和结束时间 date2 之间的天数

CURDATE、CURTIME 和 NOW 函数分别返回当前日期、当前时间和当前日期时间。在记录操作日志时,INSERT INTO operation_logs (action, operate_time) VALUES ('login', NOW());能准确记录事件发生的时间点。

YEAR、MONTH 和 DAY 函数从日期中提取年、月、日信息。在按月份统计销售额时,SELECT MONTH(sale_date) AS sale_month, SUM(amount) AS total_sales FROM sales GROUP BY sale_month;可清晰呈现各月销售情况。

DATE_ADD 函数用于日期的增减运算。计算会员到期日时,若会员有效期为 1 年,SELECT DATE_ADD(join_date, INTERVAL 1 YEAR) AS expiry_date FROM members;能自动得出到期时间。

DATEDIFF 函数计算两个日期之间的天数差。在计算员工工龄时,SELECT DATEDIFF(CURDATE(), hire_date) / 365 AS work_years FROM employees;可快速获取工作年限。

流程函数:逻辑判断的实现

流程函数能够根据条件返回不同结果,实现数据的分类和筛选。

函数 功能
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 默认值

IF 函数根据条件返回两个值中的一个。判断学生成绩是否及格时,SELECT student_name, IF(score >= 60, '及格', '不及格') AS result FROM exam_scores;简洁明了。

IFNULL 函数用于处理空值。在计算用户平均评分时,为避免空值影响结果,SELECT IFNULL(average_rating, 0) AS rating FROM users;可将空值替换为 0。

CASE 函数提供更复杂的条件判断功能。在对员工进行年龄段划分时,

sql 复制代码
SELECT name,
CASE
WHEN age < 25 THEN '青年'
WHEN age BETWEEN 25 AND 45 THEN '中年'
ELSE '老年'
END AS age_group
FROM employees;

能清晰呈现不同的年龄群体分布。另一种 CASE 函数形式可用于多值匹配,如判断工作地址所属城市级别:

sql 复制代码
SELECT name,
CASE workaddress
WHEN '北京市' THEN '一线城市'
WHEN '上海市' THEN '一线城市'
ELSE '二线城市'
END AS address_level
FROM employee;
相关推荐
ID_1800790547328 分钟前
淘宝拍立淘按图搜索API接口功能详细说明
大数据·python·json·图搜索算法
DONG9131 小时前
关系型数据库:原理、演进与生态全景——从理论基石到云原生的深度巡礼
数据库·sql·mysql·database
java1234_小锋1 小时前
周学会Matplotlib3 Python 数据可视化-绘制折线图(Lines)
开发语言·python·信息可视化·matplotlib·折线图·matplotlib3
用户576905308011 小时前
MCP入门级简单尝试
python·mcp
java1234_小锋1 小时前
一周学会Matplotlib3 Python 数据可视化-绘制直方图(Histogram)
开发语言·python·信息可视化·matplotlib·matplotlib3
秋难降2 小时前
【数据结构与算法】———深度优先:“死磕 + 回头” 的艺术
数据结构·python·算法
Kyln.Wu2 小时前
【python实用小脚本-182】Python一键爬取今日新闻:5分钟生成Word+CSV——再也不用复制粘贴
开发语言·python·word
里昆2 小时前
【AI】Pycharm中要注意Python程序文件的位置
ide·python·学习·pycharm
Jacob02343 小时前
Python与PostgreSQL实战:打造实时地理空间数据处理与管理系统
javascript·python·postgresql