编辑
2025-09-28
SQLite
00

目录

SQLite 内置函数概述
核心函数
日期和时间函数
字符串函数
数学函数
聚合函数
窗口函数
JSON 函数
BLOB 函数
系统函数
自定义函数
函数使用的最佳实践
性能考虑
结论

SQLite 提供了丰富的内置函数,这些函数可以在 SQL 查询中直接使用,大大增强了数据处理和操作的能力。本文将深入探讨 SQLite 内置函数的各个方面,包括其分类、用法、特性以及最佳实践。

SQLite 内置函数概述

SQLite 内置函数是预定义的功能,可以在 SQL 语句中直接调用。这些函数涵盖了广泛的功能,从简单的数学运算到复杂的字符串处理和日期操作。内置函数的使用可以显著简化查询逻辑,提高查询效率。

核心函数

核心函数是最常用的基本函数:

  1. typeof(X):返回参数的数据类型。
SQL
SELECT typeof(123); -- 返回 'integer'
  1. coalesce(X,Y,...):返回第一个非 NULL 参数。
SQL
SELECT coalesce(NULL, 'default'); -- 返回 'default'
  1. nullif(X,Y):如果 X 等于 Y,返回 NULL;否则返回 X。
SQL
SELECT nullif(5, 5); -- 返回 NULL
  1. random():返回一个随机整数。
SQL
SELECT random();

image.png

日期和时间函数

SQLite 提供了强大的日期和时间处理函数:

  1. date(timestring, modifier, modifier, ...):返回格式化的日期。
SQL
SELECT date('now'); -- 返回当前日期
  1. time(timestring, modifier, modifier, ...):返回格式化的时间。
SQL
SELECT time('now'); -- 返回当前时间
  1. datetime(timestring, modifier, modifier, ...):返回格式化的日期和时间。
SQL
SELECT datetime('now', '+1 day'); -- 返回明天的日期和时间
  1. julianday(timestring, modifier, modifier, ...):返回 Julian 日期(从公元前 4714 年 11 月 24 日开始的天数)。
SQL
SELECT julianday('now') - julianday('2000-01-01'); -- 计算从2000年1月1日到现在的天数

image.png

字符串函数

字符串处理是数据库操作中的常见任务:

  1. length(X):返回字符串的长度。
SQL
SELECT length('Hello'); -- 返回 5
  1. lower(X):将字符串转换为小写。
SQL
SELECT lower('HELLO'); -- 返回 'hello'
  1. upper(X):将字符串转换为大写。
SQL
SELECT upper('hello'); -- 返回 'HELLO'
  1. substr(X,Y,Z):返回字符串的子串。
SQL
SELECT substr('hello', 2, 2); -- 返回 'el'
  1. replace(X,Y,Z):替换字符串中的子串。
SQL
SELECT replace('hello world', 'world', 'SQLite'); -- 返回 'hello SQLite'

image.png

数学函数

SQLite 提供了一系列数学函数:

  1. abs(X):返回绝对值。
SQL
SELECT abs(-10); -- 返回 10
  1. round(X,Y):四舍五入到指定小数位。
SQL
SELECT round(3.14159, 2); -- 返回 3.14
  1. max(X,Y,...):返回最大值。
SQL
SELECT max(1, 2, 3); -- 返回 3
  1. min(X,Y,...):返回最小值。
SQL
SELECT min(1, 2, 3); -- 返回 1

image.png

聚合函数

聚合函数用于对一组值执行计算:

  1. avg(X):返回平均值。
SQL
SELECT avg(salary) FROM employees;
  1. count(X):返回非 NULL 值的数量。
SQL
SELECT count(*) FROM users;
  1. sum(X):返回总和。
SQL
SELECT sum(amount) FROM transactions;
  1. group_concat(X,Y):连接字符串,可选分隔符。
SQL
SELECT group_concat(name, ', ') FROM users;

窗口函数

SQLite 3.25.0 版本开始支持窗口函数:

  1. row_number():返回行号。
SQL
SELECT row_number() OVER (ORDER BY salary DESC) AS rank, name, salary FROM employees;
  1. rank():返回排名(允许并列)。
SQL
SELECT rank() OVER (ORDER BY score DESC) AS rank, name, score FROM students;
  1. dense_rank():返回密集排名(连续排名)。
SQL
SELECT dense_rank() OVER (ORDER BY score DESC) AS rank, name, score FROM students;

JSON 函数

SQLite 提供了处理 JSON 数据的函数:

  1. json(X):验证 JSON 字符串。
SQL
SELECT json('{"name": "John", "age": 30}');
  1. json_extract(X,P):从 JSON 中提取值。
SQL
SELECT json_extract('{"name": "John", "age": 30}', '$.name'); -- 返回 'John'
  1. json_insert(X,P,Y):插入新的 JSON 值。
SQL
SELECT json_insert('{"a": 1}', '$.b', 2); -- 返回 '{"a": 1, "b": 2}'

BLOB 函数

BLOB(二进制大对象)函数用于处理二进制数据:

  1. zeroblob(N):创建一个 N 字节的 BLOB。
SQL
SELECT zeroblob(10); -- 创建一个 10 字节的全零 BLOB
  1. length(X):返回 BLOB 的长度。
SQL
SELECT length(zeroblob(10)); -- 返回 10

系统函数

系统函数提供了关于 SQLite 环境的信息:

  1. sqlite_version():返回 SQLite 版本。
SQL
SELECT sqlite_version();
  1. last_insert_rowid():返回最后插入行的 ROWID。
SQL
INSERT INTO users (user_id ,name,email) VALUES (2,'John','rick1@163.com'); SELECT last_insert_rowid(); SELECT * from users u

image.png

自定义函数

SQLite 允许使用 C 语言或其他编程语言创建自定义函数。这需要通过 SQLite 的 C API 或特定语言的绑定来实现。

函数使用的最佳实践

  1. 选择适当的函数:使用最适合任务的内置函数,避免不必要的复杂查询。
  2. 利用索引:了解哪些函数可以利用索引,以提高查询性能。
  3. 注意 NULL 值处理:正确使用 COALESCE 或 IFNULL 函数处理 NULL 值。
  4. 合理使用聚合函数:在大数据集上使用聚合函数时要谨慎,可能影响性能。
  5. 避免过度使用复杂函数:在可能的情况下,将复杂的数据处理移至应用层。

性能考虑

  1. 函数索引:某些函数可以创建函数索引来提高性能。
  2. 避免在 WHERE 子句中过度使用函数:这可能会阻止使用索引。
  3. 批量操作:在处理大量数据时,考虑使用批量操作而不是逐行处理。
  4. 使用适当的数据类型:确保使用正确的数据类型以优化函数性能。

结论

SQLite 内置函数是一套强大而灵活的工具,可以大大增强数据库的功能和效率。从基本的字符串和数学操作到复杂的日期处理和 JSON 操作,这些函数涵盖了广泛的数据处理需求。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!