公式与函数
Zion 支持在组件数据绑定、条件式容器以及动作逻辑流中配置系统级公式进行高级数据加工处理。本字典汇集了平台所有内置的公式函数规范与应用示例。
1. 类型转换函数
在不同组件或接口传输时,用于对数据类型执行严谨的转换:
| 函数名称 | 功能描述 | 示例输入 | 示例输出 |
|---|---|---|---|
| TO_TEXT | 将整数、小数、布尔值或 JSON 格式的数据强转为文本字符串。 | -3.1415926 | "-3.1415926" |
| TEXT_TO_INTEGER | 将文本数字转为整数(若有小数位,则会向下取整)。 | "-3.1415926" | -3 |
| TO_DECIMAL | 将文本格式的小数转换为高精度的无限精度小数。 | "-3.1415926" | -3.1415926 |
| TEXT_TO_DATETIME | 将标准的文本格式时间字符串转为带时区的时间类型对象。 | "2025-02-21 14:36" | 2025-02-21T14:36:00.000+08:00 |
| COMBINE_DATE_AND_TIME | 将分离的日期(Date)和时间(Time)字段合并为统一的日期时间(DateTime)类型。 | 日期:2024-01-08时间: 13:38:00.000+08:00 | 2024-01-08T13:38:00.000+08:00 |
| EXTRACT_DATE_OR_TIME | 从一个完整的日期时间对象中提取纯日期或纯时间文本。 | 2024-01-08 13:38:00.000+08:00 | 2024-01-08 |
2. 文本处理函数
对字符、关键词、或文本格式执行查找、分割与格式清洗:
| 函数名称 | 功能描述 | 示例输入 | 示例输出 |
|---|---|---|---|
| TEXT_LEN | 返回目标文本字符串的物理长度(字符数)。 | "Hello World!" | 12 |
| REPLACE_PART | 根据指定的起始索引(0位起)和字符个数,替换对应的子串。 | 文本:"Hello World!"开始位置: 1字符数: 4新文本: "ola" | "Hola World!" |
| REPLACE_TEXT | 将文本中所有匹配的旧子串替换为新子串(支持限制替换次数)。 | 源文本:"Hello World!"旧文本: "o"新文本: ""次数: 1 | "Hell World!" |
| FIND | 返回指定子文本在主文本中首次出现的索引位置。 | 文本:"Hello World!"查找文本: "o" | 4 |
| CONTAINS | 判断文本中是否包含指定的子文本,返回布尔值(true/false)。 | 文本:"Hello World!"查找文本: "ello" | true |
| SUB_TEXT | 截取指定开始索引和结束索引(不含结束位)之间的子文本。 | 文本:"Hello World!"开始位置: 0结束位置: 5 | "Hello" |
| LEFT | 从文本最左侧头部截取并返回指定字符数。 | 文本:"Hello World!"字符数: 5 | "Hello" |
| RIGHT | 从文本最右侧尾部截取并返回指定字符数。 | 文本:"Hello World!"字符数: 5 | "World" |
| LOWER | 将文本中所有大写英文字母转为小写。 | "Hello World!" | "hello world!" |
| UPPER | 将文本中所有小写英文字母转为大写。 | "Hello World!" | "HELLO WORLD!" |
| RANDOM_TEXT | 生成高强度的随机安全文本。 | 最小长度:5最大长度: 10大写/小写/数字: true | "seXr3aoRD" |
| SPLIT | 使用指定的分隔符,将文本切分为字符串数组。 | 文本:"2024/01/08"分隔符: "/" | ["2024", "01", "08"] |
| ENCODE_URL | 对含有特殊汉字或符号的文本进行标准的 URL 安全编码转换。 | "https://docs.functorz.com/starts/#入门" | "https%3A%2F%2Fdocs.functorz.com%2Fstarts%2F%23%E5%85%A5%E9%97%A8" |
| DECODE_URL | 对已执行过 ENCODE_URL 编码的字符串进行逆向解码还原。 | "%E5%87%BD%E5%AD%90" | "函子" |
| UUID | 随机生成一个标准的、全球唯一的 32 位 UUID 字符串标识。 | 无 | "550e8400-e29b-41d4-a716-446655440000" |
| TEXT_REPEAT | 将指定文本循环连接重复指定次数。 | 文本:"哈"重复次数: 3 | "哈哈哈" |
| TRIM | 彻底移除文本开头和结尾的所有不可见空格。 | " Zion " | "Zion" |
| REGEX_EXTRACT | 提取文本中第一段符合正则表达式约束的匹配子串。 | 文本:"我的电话 13812345678"正则: \d{11} | "13812345678" |
| REGEX_EXTRACT_ALL | 提取并以数组格式返回所有符合正则表达式规则的匹配项。 | 文本:"号码:13812345678, 13911112222"正则: \d{11} | ["13812345678", "13911112222"] |
| REGEX_MATCH | 验证文本是否满足正则表达式规则,返回布尔值。 | 文本:"13812345678"正则: ^\d{11}$ | true |
| REGEX_REPLACE | 将文本中所有匹配正则的内容,用指定字符串批量替换(如脱敏)。 | 文本:"电话是13812345678"正则: \d{11}替换: "***********" | "电话是***********" |
3. 数学运算函数
用于在业务中执行四则运算、三角函数以及各类科学计算:
| 函数/符号 | 功能描述 | 示例输入 | 示例输出 |
|---|---|---|---|
| + | 执行数字加法。 | 5, 10 | 15 |
| - | 执行数字减法。 | 5, 10 | -5 |
| ***** | 执行数字乘法。 | 5, 10 | 50 |
| / | 执行数字除法(返回精确数值)。 | 5, 10 | 0.5 |
| % | 模运算。求两数相除后的余数(余数符号与被除数一致)。 | 被除数:-5除数: 10 | -5 |
| MIN | 在一组数字中查找并返回最小值。 | 5, 10 | 5 |
| MAX | 在一组数字中查找并返回最大值。 | 5, 10 | 10 |
| ROUND_UP | 向上取整(取大于或等于该数的最接近整数)。 | 3.1 | 4 |
| ROUND_DOWN | 向下取整(取小于或等于该数的最接近整数)。 | -3.5 | -4 |
| INT | 直接截断小数部分取整。 | -3.5 | -3 |
| ABS | 求数字的绝对值。 | -3.5 | 3.5 |
| RANDOM_NUMBER | 返回指定闭区间范围内的随机整数。 | 最小:1最大: 10 | 6 |
| POWER | 幂运算(底数的指数次方)。 | 底数:2指数: 3 | 8 |
| FORMAT_DECIMAL | 精细化格式化小数并控制舍入规则。 | 小数:3.14159精度位数: 2舍入模式: HALF_EVEN清除末尾零: true | 3.14 |
| LOG | 对数运算。求指定底数的真数对数。 | 真数:8底数: 2 | 3 |
4. 数组与列表处理函数
对集合、关系列表和 JSON 数组数据执行深度提取和遍历过滤:
| 函数名称 | 功能描述 | 示例输入 | 示例输出 |
|---|---|---|---|
| GET_ITEM | 获取数组中特定索引处的单项(索引从 0 开始)。 | 数组:["A", "B", "C"]索引: 1 | "B" |
| ARRAY_LENGTH | 返回数组或列表中包含的元素总量。 | ["A", "B", "C"] | 3 |
| FIRST_ITEM | 一键返回数组的第一项。 | ["A", "B", "C"] | "A" |
| LAST_ITEM | 一键返回数组的最后一项。 | ["A", "B", "C"] | "C" |
| RANDOM_ITEM | 随机从数组中抽取一项元素返回。 | ["A", "B", "C"] | "B" |
| SLICE | 截取数组中的某一段。 | 数组:["A", "B", "C"]起点: 1数量: 2 | ["B", "C"] |
| JOIN | 将文本型数组的所有元素拼接,由指定符号连接为字符串。 | 数组:["2026", "06", "10"]连接符: "-" | "2026-06-10" |
| INDEX_OF | 返回指定项在数组中首次出现的索引(若不存在,返回 -1)。 | 数组:["A", "B", "C"]指定项: "C" | 2 |
| SEQUENCE | 生成一个指定区间和步长的连续数字序列数组(含头不含尾)。 | 起点:0终点: 10步长: 2 | [0, 2, 4, 6, 8] |
| COALESCE | 按自左向右顺序,返回参数数组中第一个非空 (Not Null) 的项。 | [null, 1, 3, 2] | 1 |
| ARRAY_MAX | 返回数字数组中的最大数值。 | [1, 2, 3] | 3 |
| ARRAY_MIN | 返回数字数组中的最小数值。 | [1, 2, 3] | 1 |
| ARRAY_SUM | 累加数字数组中的所有数值。 | [1, 2, 3] | 6 |
| ARRAY_AVERAGE | 计算并返回数字数组的平均值。 | [1, 2, 3] | 2 |
| ARRAY_CONCAT | 将两个数组合并。 | 数组1:[1, 2]数组2: [2, 3] | [1, 2, 2, 3] |
| UNIQUE | 去除数组中的所有重复项,返回唯一值新数组。 | [1, 2, 2, 3] | [1, 2, 3] |
| ARRAY_MAPPING | 对数组内的每一个元素进行特定的遍历转换(Map)。 | 数组:[1, 2, 3]展开式: item * 10 | [10, 20, 30] |
| FILTER | 按指定逻辑条件,过滤并返回符合要求的子数组(Filter)。 | 数组:[1, 2, 3]条件: item > 1 | [2, 3] |
5. 时间运算函数
对高精度的带时区日期时间、时间差执行高级运算:
| 函数名称 | 功能描述 | 示例输入 | 示例输出 |
|---|---|---|---|
| GET_DATE_TIME | 依据指定的年月日时分秒数值,组装成标准的带时区 DateTime 时间戳。 | 年:2026月: 6日: 10时: 12 | 2026-06-10T12:00:00.000+08:00 |
| DELTA | 时间的增减平移运算(加/减特定的小时、分钟或秒数)。 | 时间:13:38:00.000+08:00运算: 加时: 1分: 12 | 14:50:00.000+08:00 |
| DURATION | 计算并返回两个绝对时间点之间的物理间隔跨度(支持折算为年、天、时等单位)。 | 开始:2019-12-01结束: 2024-01-08单位: 年 | 5 |
| EXTRACT | 从完整时间中提取特定成分(若提取星期几,输出 0~6 整数,其中 0 表示星期日)。 | 时间:13:38:00.000+08:00单位: 时 | 13 |
💡
Zion 标准 ISO 8601 时间戳格式说明:
对于输出示例 2024-01-08T13:38:00.000+08:00:
2024-01-08:物理日期(年-月-日)。T:国际标准规定的日期与时间的物理分割符。13:38:00.000:高精度的具体时间(小时:分钟:秒.毫秒)。+08:00:表示该时间是在世界协调时(UTC)基准上加 8 小时的东八区时间(即北京时间)。
6. 地理位置与 JSON 处理函数
| 函数名称 | 功能描述 | 示例输入 | 示例输出 |
|---|---|---|---|
| DISTANCE | 计算地球表面两个经纬度坐标点之间的测地学物理距离(支持米、千米、英里等单位)。 | 位置1:[120.2934, 30.3150]位置2: [120.2934, 31.3150]单位: 千米 | 866 |
| GET_VALUE_FROM_GEO_POINT | 从一个复合的经纬度定位点中,单独提取经度(Longitude)或纬度(Latitude)值。 | 位置:[120.2934, 30.3150]类型: 纬度 | 30.3150 |
| JSON_EXTRACT_PATH | 采用 JSON 树形路径语法,从 JSON 节点中精准提取目标数据(支持 JSONB 字段解析)。 | JSON:{"data": {"foo": "bar"}}路径: data.foo | "bar" |
Last updated on