Skip to Content
数据处理公式与条件判断

公式与条件数据

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:002024-01-08

文本处理

名称描述示例输入示例输出
STRING_LEN返回文本长度"Hello World!"12
REPLACE_PART替换指定位置的文本文本:"Hello World!"
起始位置:1
替换字符数:4
新文本:"ola"
"Hola World!"
REPLACE_TEXT替换指定文本文本:"Hello World!"
旧文本:"o"
新文本:""
替换次数:1
"Hell World"
FIND返回指定文本首次出现的位置文本:"Hello World!"
要定位的文本:"o"
4
CONTAIN判断是否存在指定文本文本:"Hello World!"
要查找的文本:"ello"
true
SUBSTRING截取一段子文本文本:"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.54
ROUND_DOWN返回向下最接近的整数数字:-3.5-4
INT取整数字:-3.53
ABS返回绝对值数字:-3.53.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
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获取时间中指定的部分。如果是获取星期几,输出0到6的整数,0 表示星期日时间:13:38:00.000+08:00
单位:
13
💡
  1. 日期: 2024-01-08 代表年-月-日。
  2. T 是日期和时间的分隔符
  3. 时间: 13:14:00.246046 代表 小时:分钟:秒.毫秒
  4. 时区: +08:00 代表这个时间是在UTC(协调世界时)基础上加8小时的时区,这通常对应于中国标准时间(CST)。

地理位置

名称描述示例输入示例输出
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"

条件数据

Zion 支持在组件和行为中使用条件数据,允许根据特定条件动态选择和展示数据。条件数据可以用于实现复杂的业务逻辑,例如根据用户角色、状态或其他条件展示不同的内容。

条件数据的配置方式如下:

条件数据示意图

具体的例子如下:

{ "conditions": [ { "case": "case1", "condition": "user.isLoggedIn", "data": { "text": "欢迎回来,用户!" } }, { "case": "case2", "condition": "!user.isLoggedIn", "data": { "text": "请登录以继续。" } } ] }

在上述示例中,根据用户是否登录的状态,展示不同的文本内容。

Last updated on