SQLite 常用函数(超详细)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
前言
在数据库开发中,函数是提升数据处理效率的核心工具。SQLite 作为轻量级、高性能的关系型数据库,提供了丰富的内置函数,能够帮助开发者快速完成数据清洗、计算和转换。无论是处理字符串、数值,还是操作日期时间,SQLite 的函数体系都能提供灵活且高效的解决方案。本文将从基础到进阶,系统性地讲解 SQLite 常用函数,并通过实际案例展示其应用场景,帮助读者快速掌握这些工具的使用方法。
一、字符串函数:数据的“文字编辑器”
字符串函数是处理文本数据的“瑞士军刀”,适用于拼接、截取、替换等操作。想象一下,字符串就像一块布料,而函数就是裁剪、缝纫的工具,能精准完成对字符的加工。
1. substr()
:按位置截取子字符串
substr(text, start, length)
函数从指定位置开始截取字符串,常用于提取固定长度的数据。例如,从身份证号中提取出生年份:
SELECT substr('110105199003072315', 7, 4); -- 结果:1990
注意:SQLite 的索引从 1 开始,而部分数据库(如 PostgreSQL)从 0 开始,需特别留意。
2. replace()
:批量替换字符
replace(text, old_str, new_str)
可替换字符串中的指定内容。例如,将文本中的英文逗号替换为中文顿号:
SELECT replace('apple,banana,orange', ',', '、'); -- 结果:apple、banana、orange
3. length()
:获取字符串长度
length(text)
返回字符数量,适用于验证输入长度。例如,检查用户名是否符合 6-12 位的要求:
SELECT CASE
WHEN length('user123') BETWEEN 6 AND 12 THEN '有效'
ELSE '无效'
END; -- 结果:有效
二、数值函数:数学运算的“计算器”
数值函数是 SQLite 的“计算引擎”,能处理加减乘除、取整、随机数生成等需求。它们如同计算器的按键,让开发者快速完成复杂计算。
1. abs()
:获取绝对值
abs(number)
返回数值的绝对值。例如,计算温度差的绝对值:
SELECT abs(-5.5); -- 结果:5.5
2. round()
:四舍五入
round(number, decimal)
对数值进行四舍五入。例如,保留两位小数:
SELECT round(3.1415926, 2); -- 结果:3.14
3. random()
:生成随机数
random()
生成一个随机整数,常用于测试或抽样场景。例如,随机选取 10% 的用户:
SELECT * FROM users WHERE random() % 10 = 0;
三、日期与时间函数:时间管理的“时钟”
日期时间函数是处理时间数据的“万年历”,支持格式化、计算间隔等操作。它们如同时间的转换器,能将日期转换为不同格式或计算两个时间的差值。
1. date()
:基础日期操作
date(text, modifier)
可解析并操作日期。例如,获取下个月的第一天:
SELECT date('2023-10-15', '+1 month', 'start of month'); -- 结果:2023-11-01
2. strftime()
:灵活的时间格式化
strftime(format, datetime)
根据指定格式解析或输出时间。例如,将 Unix 时间戳转为可读格式:
SELECT strftime('%Y-%m-%d %H:%M', 1717986917); -- 结果:2024-06-11 14:35
3. julianday()
:计算时间差
julianday(datetime)
将日期转换为儒略日数,可用于计算两个时间的间隔。例如,计算出生日期与当前的年龄:
SELECT julianday('now') - julianday('1990-03-07'); -- 结果:11,840 天(约 32 年)
四、聚合函数:数据的“统计大师”
聚合函数是数据统计的“仪表盘”,能对多行数据进行汇总计算。它们如同统计员,将大量数据浓缩为关键指标,如总和、平均值或最大值。
1. sum()
:计算总和
sum(column)
求某一列的数值总和。例如,统计某月订单的总销售额:
SELECT sum(amount) FROM orders WHERE order_date BETWEEN '2023-10-01' AND '2023-10-31';
2. avg()
:计算平均值
avg(column)
计算数值的平均值。例如,计算班级平均分:
SELECT avg(score) FROM students WHERE class = '3A';
3. count()
:统计行数
count(*)
统计总行数,而 count(column)
统计非空值的行数。例如,统计用户中未填写手机号的人数:
SELECT count(*) AS total_users, count(phone) AS users_with_phone FROM users;
五、条件函数:逻辑判断的“交通灯”
条件函数是控制数据流向的“开关”,通过判断条件返回不同结果,常见于复杂查询的逻辑分支。
1. CASE
表达式:多条件分支
CASE
类似编程中的 switch
语句,根据条件返回不同值。例如,根据分数划分等级:
SELECT name,
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 70 THEN 'B'
ELSE 'C'
END AS level
FROM students;
2. IFNULL()
:处理空值
IFNULL(expr, value)
若表达式为 NULL
,则返回替代值。例如,显示默认头像路径:
SELECT IFNULL(avatar_url, '/default.jpg') AS avatar FROM users;
六、进阶函数:高级场景的“工具包”
以下函数适用于复杂场景,如正则表达式匹配或复杂数据转换,适合中级开发者深入掌握。
1. printf()
:格式化输出
printf(format, ...)
类似 C 语言的 printf
,用于组合字符串。例如,生成用户欢迎语:
SELECT printf('欢迎,%s!您的余额为 %.2f 元。', name, balance) AS message FROM users;
2. regexp()
:正则表达式匹配(需扩展)
SQLite 原生不支持正则函数,但可通过扩展(如 sqlite3_routines
)实现。例如,筛选邮箱格式:
SELECT * FROM users WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';
结论
SQLite 的 常用函数 构成了数据处理的核心工具集,从基础的字符串操作到复杂的统计分析,都能通过这些函数高效完成。通过本文的案例与代码示例,读者可以快速掌握函数的使用逻辑,并结合实际项目进行实践。建议读者在开发中多尝试组合函数,例如将 CASE
与聚合函数结合,或用 strftime()
格式化时间,逐步提升数据处理能力。掌握这些函数,将使开发者在 SQLite 开发中更加得心应手,应对各种复杂场景。