公式与条件判断
数据的使用除了能被行为和组件直接使用外,也被用于公式运算和条件判断。
公式
公式就是用来计算数据的函数。Zion 提供了多种公式,可以对文字、数字、数组、时间等不同类型的数据进行运算。
类型转换
名称 | 描述 | 示例 |
---|---|---|
TO_TEXT | 将整数、小数、jsonb 等转换成文本类型的数据 | 原数据:{"message": "Hello World!"} >> '{"message": "Hello World!"}' |
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 | 将日期和时间组合成日期时间 | 日期: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 |
文字处理
名称 | 描述 | 示例 |
---|---|---|
STRING_LEN | 返回文本长度,中文、字母、数字、符号都算1个字符。 | 文本:"Hello World!">> 12 |
REPLACE_PART | 根据指定的位置(第一个字符为0)和字符数,将部分文本替换为新文本。 | 文本:"Hello World!"起始位置:1替换的字符数:4新文本:"ola">> "Hola World!" |
REPLACE_TEXT | 查找指定的文本,根据次数将其替换成新文本。 | 文本:"Hello World!"旧文本:"o"新文本:""替换次数:1>> "Hell World" |
FIND | 返回第一次出现指定文本的位置。第一个字符的位置为 0,未找到返回 -1。 | 文本:"Hello World!"要定位的文本:"o">> 4 |
CONTAIN | 判断是否存在指定文本,如果存在,返回布尔值true;否则,false。 | 文本:"Hello World!"要查找的文本:"ello">> true |
SUBSTRING | 截取一段子文本。包含开始位置,不包含结束位置;第一个字符的位置为 0。 | 文本:"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_STRING | 生成随机文本。注意,由于随机字符是在前端生成,容易被控制,不建议在生成券码等场景中使用。 | 最小长度:5最大长度:10小写:true大写:true数字:true>> "seXr3aoRD" |
SPLIT | 通过指定字符将文本分割成数组。 | 文本:"2024/01/08"分隔符:"/">> ["2024", "01", "08"] |
数学运算
名称 | 描述 | 示例 |
---|---|---|
+ | 数字间的加法。 | 数字1:5数字2:10>> 15 |
- | 数字间的减法。 | 数字1:5数字2:10>> -5 |
* | 数字间的乘法。 | 数字1:5数字2:10>> 50 |
/ | 数字间的除法。 | 数字1:5数字2:10>> 0.5 |
% | 返回除后所得的余数,符号与被除数一致。 | 被除数:-5除数:10>> -5 |
MIN | 返回最小值。 | 数字1:5数字2:10>> 5 |
MAX | 返回最大值。 | 数字1:5数字2:10>> 10 |
ROUND_UP | 返回向上最接近的整数。 | 数字:3.5>> 4 |
ROUND_DOWN | 返回向下最接近的整数。 | 数字:-3.5>> -4 |
INT | 取整。 | 数字:-3.5>> 3 |
ABS | 返回绝对值。 | 数字:-3.5>> 3.5 |
RANDOM_NUMBER | 返回指定数字之间的随机整数。注意,由于随机数是在前端生成,容易被控制,不建议在抽奖等场景中使用。 | 最小值:1最大值:10>> 6 |
POWER | 幂运算 | 底数:2指数:3>> 8 |
DECIMAL_FORMAT | 小数格式化。注意,如果选择“清除末尾所有零“,会返回文本类型的数据。 | 小数:3.1415926精确到几位小数:2舍入模式: HALF_EVEN清除末尾的所有零: true>> 3.14 |
数组处理
名称 | 描述 | 示例 |
---|---|---|
GET_ITEM | 从数组中获取一项,索引从0开始。 | 数组:["2024", "01", "08"]索引:1>> "01" |
ARRAY_TO_ITEM | 从数组中获取一项(即将废弃,推荐使用GET_ITEM)。 | 输入数组:["2024", "01", "08"]索引:1输出"01" |
ARR_LEN | 获取数组的长度。 | 输入数组:["2024", "01", "08"]输出3 |
FIRST | 返回数组的第一项。 | 输入数组:["2024", "01", "08"]输出"2024" |
LAST | 返回数组的最后一项。 | 输入数组:["2024", "01", "08"]输出"08" |
RANDOM_ITEM | 返回数组的随机一项。 | 输入数组:["2024", "01", "08"]输出"01" |
SLICE | 取出数组中的一段。 | 输入数组:["2024", "01", "08"]开始位置:1数量:2输出["01", "08"] |
JOIN | 将文本类型的数组连接成字符串。 | 数组:["2024", "01", "08"]连接符:"-">> "2024-01-08" |
INDEX_OF | 返回指定项第一次出现的索引。 | 输入数组:["2024", "01", "08"]指定项:"08"输出2 |
时间运算
名称 | 描述 | 示例 |
---|---|---|
GET_DATE_TIME | 获取时间点。 | 类型:日期时间配置:自定义年:2024月:1日:8时:13分:14秒:0>> 2024-01-08T13:14:00.000+08:00说明:1. 日期: 2024-01-08 代表年-月-日。2. T 是日期和时间的分隔符3. 时间: 13:14:00.246046 代表小时:分钟:秒.毫秒4. 时区: +08:00 代表这个时间是在UTC(协调世界时)基础上加8小时的时区,这通常对应于中国标准时间(CST)。 |
DELTA | 时间的加/减运算。 | 时间:13:38:00.000+08:00运算类型:加时:1分:12秒:0>> 14:50:00.000+08:00 |
DURATION | 计算两个时间点的间隔。 | 开始:2019-12-01结束:2024-01-08时间差转换为:年>> 5 |
EXTRACT | 获取时间中的指定部分。 | 时间:13:38:00.000+08:00单位:时>> 13 |
地理位置
名称 | 描述 | 示例 |
---|---|---|
DISTANCE | 计算两个地理位置之间的距离。单位可选择为:米、千米、英里 | 位置1:[120.2934,30.3150]位置2:[120.2934,31.3150]单位:千米>> 866 |
GET_VALUE_FROM_GEO_POINT | 从地理位置(经纬度)中获取经度或纬度。 | 位置:[120.2934,30.3150]类型:纬度>> 30.3150 |
JSON 处理方法
名称 | 描述 | 示例 |
---|---|---|
JSON_EXTRACT_PATH | 从json中获取数据。 | 输入Json:{"data": {"foo": "bar"}}路径:data.foo输出"bar" |
条件判断
在条件式容器、条件数据、行为流的条件分支中均会用到数据的逻辑运算。详细使用方法请查看相关文档。