SQLite 常用函数

下面是一份 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.5
UNIXEPOCH('now')Unix 时间戳(秒)1730942820

SG 最佳实践

-- 插入带本地时间
INSERT INTO logs (action, created_at)
VALUES ('login', DATETIME('now', 'localtime'));

-- 查询今天
WHERE DATE(created_at) = DATE('now', 'localtime')

二、字符串函数

函数说明示例
LENGTH(str)长度LENGTH('SQLite') → 6
SUBSTR(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.14
ABS(num)绝对值ABS(-5) → 5
RANDOM()随机整数(-9e18 ~ 9e18)RANDOM() % 100 → 0~99
COUNT(*), 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 → defaultIFNULL(phone, 'N/A')
NULLIF(a, b)a=b → NULLNULLIF(status, 'deleted')
COALESCE(a,b,c...)第一个非 NULLCOALESCE(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)验证/格式化 JSONJSON('{"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()最后插入的 IDLAST_INSERT_ROWID()
TOTAL_CHANGES()连接总变更数
SQLITE_VERSION()SQLite 版本'3.45.0'
HEX(str)转十六进制HEX('ABC') → '414243'
ZEROBLOB(n)生成 n 字节 0ZEROBLOB(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, CASE
JSONJSON_EXTRACT, JSON_OBJECT
调试LAST_INSERT_ROWID(), SQLITE_VERSION()

需要我为你生成:

  • 带 SG 时间的日志分析 SQL
  • JSON 配置表操作模板
  • 随机抽样 + 分页查询

把你的表结构发我,秒出方案!

文章已创建 2326

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部