DexSQL 接受 SQLite 内置函数的一个子集。不在列表里的会在解析期被拒(function call is outside the DexSQL read-only subset),而不是悄悄算错。
标量函数
| 文本 | length substr/substring upper lower trim ltrim rtrim replace instr hex quote unicode char |
| 数值 | abs min(a, b, …) max(a, b, …) |
| 空值 / 条件 | coalesce ifnull nullif iif |
| 类型 | typeof |
| DEX 专用 | dex_java_name |
dex_java_name 把 DEX 类型 descriptor 渲染成 Java 风格名字——dex_java_name('Lcom/f/B;') 得到 com.f.B,[I 得到 int[],V 得到 void。它就是 types.java_name 背后的那个函数,直接内联调用和读那一列享受同样的处理。
min / max 传两个及以上参数时是标量函数,传一个时是聚合函数。
聚合函数
count(*) count(x) count(DISTINCT x) sum avg total min max group_concat(x) group_concat(x, sep) string_agg(x, sep)
group_concat 支持排序,这是让拼接结果确定的关键:group_concat(value, ',' ORDER BY ordinal)。protos 视图的 param_descriptors 就是这么来的。
char(...) 按码点构造文本;char() 返回空文本。U+0000 会保留,补充平面字符在内部使用 MUTF-8 代理对。输出转换和原始字节转换见文本值。
窗口函数
row_number() rank() dense_rank() ntile(n) lag(x[, offset[, default]]) lead(x[, offset[, default]]) first_value(x) last_value(x),以及带 OVER (...) 的 count、sum、avg、min、max。不支持 DISTINCT 窗口聚合。不支持的名称、参数数量或窗口形式会返回错误。
Copyright (c) 2026 LSPosed Developers。本文档采用 MIT 许可证。