2025-09-28
SQLite
0

目录

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 许可协议。转载请注明出处!