下面是一份 SQLite 常用函数速查表 (适用于日常开发、数据分析、日志处理等),按 分类 整理,带示例 + SG 时区说明 ,方便你直接复制使用。
当前时间(SG):2025-11-07 09:27:00 +08
一、日期时间函数 (SG 用户必备)
函数 说明 示例 DATETIME('now', 'localtime')当前 新加坡时间 '2025-11-07 09:27:00'DATE('now', 'localtime')今天日期 '2025-11-07'TIME('now', 'localtime')当前时间 '09:27:00'CURRENT_TIMESTAMPUTC 时间 '2025-11-07 01:27:00'STRFTIME('%Y-%m-%d %H:%M', t, 'localtime')格式化本地时间 '2025-11-07 09:27'JULIANDAY('now')儒略日(计算时间差) 2461372.5UNIXEPOCH('now')Unix 时间戳(秒) 1730942820
S G 最佳实践 :
-- 插入带本地时间
INSERT INTO logs (action, created_at)
VALUES ('login', DATETIME('now', 'localtime'));
-- 查询今天
WHERE DATE(created_at) = DATE('now', 'localtime')
二、字符串函数
函数 说明 示例 LENGTH(str)长度 LENGTH('SQLite') → 6SUBSTR(str, start, len)截取 SUBSTR('123456', 2, 3) → '234'TRIM(str) / LTRIM / RTRIM去空格 TRIM(' hi ') → 'hi'REPLACE(str, from, to)替换 REPLACE('hello', 'l', 'x') → 'hexxo'UPPER(str) / LOWER(str)大小写 UPPER('sql') → 'SQL'PRINTF('%s: %d', name, age)格式化 'Alice: 25'||拼接 'ID:' || id → 'ID:123'
-- 名字首字母大写
SELECT UPPER(SUBSTR(name, 1, 1)) || LOWER(SUBSTR(name, 2)) FROM users;
三、数学 & 聚合函数
函数 说明 示例 ROUND(num, n)保留 n 位小数 ROUND(3.14159, 2) → 3.14ABS(num)绝对值 ABS(-5) → 5RANDOM()随机整数(-9e18 ~ 9e18) RANDOM() % 100 → 0~99COUNT(*), COUNT(col)计数 COUNT(*) → 行数SUM(col), AVG(col)求和、平均 AVG(salary)MAX(col), MIN(col)最值 MAX(created_at)TOTAL(col)求和(NULL → 0) TOTAL(score)
-- 随机抽样 10 条
SELECT * FROM logs ORDER BY RANDOM() LIMIT 10;
四、条件判断函数
函数 说明 示例 IFNULL(col, default)NULL → default IFNULL(phone, 'N/A')NULLIF(a, b)a=b → NULL NULLIF(status, 'deleted')COALESCE(a,b,c...)第一个非 NULL COALESCE(email, phone, 'unknown')CASE WHEN ... THEN ... ELSE ... END条件分支 见下
-- 状态显示
SELECT
name,
CASE
WHEN status = 1 THEN 'Active'
WHEN status = 0 THEN 'Inactive'
ELSE 'Unknown'
END AS status_text
FROM users;
五、JSON 函数 (SQLite 3.38+ 推荐)
函数 说明 示例 JSON(data)验证/格式化 JSON JSON('{"a":1}') → '{"a":1}'JSON_EXTRACT(data, path)取值 JSON_EXTRACT(meta, '$.ip')JSON_SET(data, path, val)设置值 JSON_SET(meta, '$.active', 1)JSON_ARRAY(...)创建数组 JSON_ARRAY(1,2,3)JSON_OBJECT(key,val...)创建对象 JSON_OBJECT('name','Bob')
-- 存灵活配置
CREATE TABLE settings (
id INTEGER PRIMARY KEY,
meta JSON
);
INSERT INTO settings (meta) VALUES (JSON_OBJECT('theme', 'dark', 'lang', 'en'));
六、类型转换函数
函数 说明 CAST(expr AS TYPE)强制转换 typeof(expr)查看类型
-- 字符串转整数
SELECT CAST('123' AS INTEGER) + 1; -- 124
-- 调试类型
SELECT typeof(created_at) FROM logs LIMIT 1;
七、高级实用函数
函数 说明 示例 CHANGES()最近 INSERT/UPDATE/DELETE 影响行数 CHANGES()LAST_INSERT_ROWID()最后插入的 ID LAST_INSERT_ROWID()TOTAL_CHANGES()连接总变更数 SQLITE_VERSION()SQLite 版本 '3.45.0'HEX(str)转十六进制 HEX('ABC') → '414243'ZEROBLOB(n)生成 n 字节 0 ZEROBLOB(1024)
-- 插入后获取 ID
INSERT INTO users (name) VALUES ('Alice');
SELECT LAST_INSERT_ROWID(); -- 新 ID
八、SG 用户专属时间函数组合
-- 1. 今天开始时间(00:00:00)
DATE('now', 'localtime', 'start of day')
-- 2. 本月第一天
STRFTIME('%Y-%m-01', 'now', 'localtime')
-- 3. 7天前
DATETIME('now', '-7 days', 'localtime')
-- 4. 按小时分组
STRFTIME('%Y-%m-%d %H:00', created_at, 'localtime') AS hour
-- 5. 年龄计算
STRFTIME('%Y', 'now') - STRFTIME('%Y', birth_date)
- (STRFTIME('%m%d', 'now') < STRFTIME('%m%d', birth_date)) AS age
九、一键查询模板(复制即用)
-- 今日统计(SG 时间)
SELECT
COUNT(*) AS total_events,
COUNT(CASE WHEN action = 'login' THEN 1 END) AS logins
FROM logs
WHERE DATE(created_at) = DATE('now', 'localtime');
-- 最近 30 天趋势
SELECT
DATE(created_at, 'localtime') AS day,
COUNT(*) AS events
FROM logs
WHERE created_at >= DATETIME('now', '-30 days', 'localtime')
GROUP BY day
ORDER BY day;
十、性能提示
函数 是否影响索引 DATE(col)不能命中索引 col >= '2025-11-01'能命中索引 STRFTIME('%Y-%m', col)不能
推荐 :时间字段用 TEXT 存 ISO8601,直接比较字符串 :
WHERE created_at >= '2025-11-01 00:00:00'
AND created_at < '2025-11-08 00:00:00'
总结:SQLite 函数速查卡
分类 核心函数 时间 DATETIME('now','localtime'), STRFTIME, JULIANDAY字符串 TRIM, UPPER, SUBSTR, ||数学 ROUND, RANDOM(), AVG, SUM条件 COALESCE, IFNULL, CASEJSON JSON_EXTRACT, JSON_OBJECT调试 LAST_INSERT_ROWID(), SQLITE_VERSION()
需要我为你生成:
带 SG 时间的日志分析 SQL ?
JSON 配置表操作模板 ?
随机抽样 + 分页查询 ?
把你的表结构发我,秒出方案!