表达式函数
上次更新日期:2026/10/28在构建表达式时,使用函数来转换行值、处理缺失数据或检索相关值。有关详细信息,请参阅构建表达式。
以下函数描述了 SaaS 管理的登陆、湖登陆和复制任务中的移动任务表达式。使用编辑器中显示的函数签名。签名中的方括号表示可选参数;请勿输入方括号。
有关 CDC 存储和流式转换函数,请参阅 转换函数。对于在云数据平台上执行的存储、转换和数据集市表达式,请使用该平台的函数语法。
字符串函数
前缀和后缀函数作用于字符串的开头或结尾。字符替换作用于单个字符,而不是匹配整个前缀或后缀。
| 函数 | 行为与参数 | 示例和结果 |
|---|---|---|
$CONCAT(X, Y)
|
按此顺序连接两个字符串 X 和 Y。如果任一参数为 NULL,则返回 NULL。嵌套调用以连接两个以上的字符串。 |
$CONCAT('My', 'Picture') 返回 'MyPicture'。$CONCAT('My', NULL) 返回 NULL。 |
$INSTR(string, substring)
|
返回 substring 在 string 中首次出现的基于 1 的位置。如果未找到子字符串,则返回 0。 |
$INSTR('mystring', 'ing') 返回 6。$INSTR('mystring', 'xyz') 返回 0。 |
$LENGTH(string)
|
返回 string 中的字符数,而不是其字节大小。 |
$LENGTH('mystring') 返回 8。 |
$LOWER(string)
|
返回 string 的副本,其中 ASCII 字母已转换为小写。 |
$LOWER('ABC') 返回 'abc'。 |
$LTRIM(string[, characters])
|
从 string 的开头移除字符。可选的 characters 参数是一组要移除的字符,而不是前缀。如果省略,则移除空格。 |
$LTRIM(' orders') 返回 'orders'。$LTRIM('@@orders', '@') 返回 'orders'。 |
$REMOVE_PREFIX(string, prefix)
|
返回移除了指定开头 prefix 的 string 副本。 |
$REMOVE_PREFIX('mystring', 'my') 返回 'string'。 |
$REMOVE_SUFFIX(string, suffix)
|
返回移除了指定结尾 suffix 的 string 副本。 |
$REMOVE_SUFFIX('mystring', 'ing') 返回 'mystr'。 |
$REPLACE(string, pattern, replacement)
|
将 string 中出现的每个 pattern 替换为 replacement。所有三个参数都是必需的。使用空替换字符串来删除匹配的文本。 |
$REPLACE('a-b-c', '-', '_') 返回 'a_b_c'。$REPLACE('a-b', '-', '') 返回 'ab'。 |
$REPLACE_CHARS(string, chars, replacement)
|
将 chars 中列出的每个字符替换为 replacement 中相同位置的字符。未列出的字符保持不变。如果缺少替换位置,则使用第一个替换字符。 |
$REPLACE_CHARS('mystring', 's', 'z') 返回 'myztring'。$REPLACE_CHARS('abcde', 'abcd', '123') 返回 '1231e'。 |
$REPLACE_PREFIX(string, prefix, replacement)
|
将 string 开头的 prefix 替换为 replacement。 |
$REPLACE_PREFIX('mystring', 'my', 'new') 返回 'newstring'。 |
$REPLACE_SUFFIX(string, suffix, replacement)
|
将 string 中末尾的 suffix 替换为 replacement,而不是替换所有匹配项。 |
$REPLACE_SUFFIX('mystring', 'ing', 'new') 返回 'mystrnew'。 |
$RTRIM(string[, characters])
|
从 string 的末尾移除字符。可选的 characters 参数是一组要移除的字符,而不是后缀。如果省略,则移除空格。 |
$RTRIM('orders ') 返回 'orders'。$RTRIM('orders@@', '@') 返回 'orders'。 |
$SUBSTR(string, start[, length])
|
从 string 中提取文本,从基于 1 的位置 start 开始。length 指定字符数。如果省略,则返回剩余字符。 |
$SUBSTR('abcdef', 2, 3) 返回 'bcd'。 |
$TRIM(string[, characters])
|
移除 string 两端的字符。可选的 characters 参数是要移除的字符集,而不是子字符串。如果省略,则移除空格。 |
$TRIM(' orders ') 返回 'orders'。$TRIM('@#orders#@', '@#') 返回 'orders'。 |
$UNICODE(string)
|
返回 string 中第一个字符的 Unicode 码位数值。参数必须是字符串。 |
$UNICODE('ABC') 返回 65。 |
$UPPER(string)
|
返回 string 的副本,其中 ASCII 字母已转换为大写。 |
$UPPER('abc') 返回 'ABC'。 |
数字函数
使用这些函数计算当前行的数值。$MAX 和 $MIN 比较行内的参数,而不是跨行的值。
| 函数 | 行为与参数 | 示例和结果 |
|---|---|---|
$ABS(X)
|
返回数值参数 X 的绝对值。 |
$ABS(-20) 返回 20。 |
$MAX(arg1, arg2, ...)
|
返回所提供的数值参数中的最大值。至少提供两个参数。 | $MAX(10, 4, 20, 9) 返回 20。 |
$MIN(arg1, arg2, ...)
|
返回所提供数值参数中的最小值。至少提供两个参数。 | $MIN(10, 4, 20, 9) 返回 4。 |
$RANDOM()
|
返回一个伪随机有符号整数。不接受任何参数。 | $RANDOM() 返回一个整数,该整数可以为负数、零或正数。其值在各次调用之间会有所不同。 |
$ROUND(value[, digits])
|
将 value 四舍五入到 digits 位小数,并返回一个浮点值。如果省略 digits,则舍入到 0 位小数。 |
$ROUND(3.141592, 3) 返回 3.142。 |
LOB 函数
这些函数用于处理二进制大对象 (BLOB)。size 参数 N 指定的是字节,而非字符。
| 函数 | 行为与参数 | 示例和结果 |
|---|---|---|
$HEX(blob)
|
返回表示 blob 的字节的大写十六进制文本。数值输入首先转换为文本;结果并非该数字的机器表示。 |
$HEX(X'4142') 返回 '4142'。 |
$RANDOM_BLOB(N)
|
返回 N 个伪随机字节。如果 N 小于 1,则返回一个字节。请勿使用此函数来保证密码学随机性。 |
$RANDOM_BLOB(4) 返回一个 4 字节的 BLOB。其值在各次调用之间会有所不同。 |
$ZERO_BLOB(N)
|
返回包含 N 个零字节的 BLOB。 |
$HEX($ZERO_BLOB(3)) 返回 '000000'。 |
Null 检查函数
| 函数 | 行为与参数 | 示例和结果 |
|---|---|---|
$COALESCE(X, Y, ...)
|
按参数顺序返回第一个非 NULL 参数。至少提供两个参数。如果所有参数均为 NULL,则结果为 NULL。空字符串不是 NULL。 | $COALESCE(NULL, 'Unknown') 返回 'Unknown'。$COALESCE('', 'Unknown') 返回空字符串。 |
$IFNULL(X, Y)
|
如果 X 不为 NULL,则返回该值;否则返回 Y。如果两个参数都为 NULL,则返回 NULL。请提供恰好两个参数。 |
$IFNULL(NULL, 'Unknown') 返回 'Unknown'。$IFNULL('Known', 'Unknown') 返回 'Known'。 |
$NULLIF(X, Y)
|
如果 X 和 Y 相等,则返回 NULL;否则返回 X。请提供恰好两个参数。 |
$NULLIF('Unknown', 'Unknown') 返回 NULL。$NULLIF('Known', 'Unknown') 返回 'Known'。 |
日期和时间函数
提供日期、时间或日期时间字符串,例如 '2026-10-08'、'12:34:56' 或 '2026-10-08 12:34:56'。将日期常量放在引号内,这样连字符就不会被解释为减法。
| 函数 | 行为与参数 | 示例和结果 |
|---|---|---|
$DATE(date_string)
|
以 YYYY-MM-DD 格式将 date_string 中的日期作为文本返回。 |
$DATE('2026-10-08') 返回 '2026-10-08'。 |
$DATETIME(datetime_string)
|
以 YYYY-MM-DD HH:MM:SS 格式将 datetime_string 中的日期和时间作为文本返回。 |
$DATETIME('2026-10-08 12:34:56') 返回 '2026-10-08 12:34:56'。 |
$JULIANDAY(datetime_string)
|
返回自公元前 4714 年 11 月 24 日格林尼治正午以来的小数天数。将两个儒略日值相减以计算经过的天数。 | $JULIANDAY('2000-01-01 12:00:00') 返回 2451545.0。$JULIANDAY('2026-10-09') - $JULIANDAY('2026-10-08') 返回 1.0。 |
$STRFTIME(format, datetime_string)
|
返回使用 format 格式化的文本。格式位于日期或日期时间输入之前。 |
$STRFTIME('%Y-%m', '2026-10-08') 返回 '2026-10'。 |
$TIME(time_string)
|
以 HH:MM:SS 格式将 time_string 中的时间作为文本返回。 |
$TIME('12:34:56') 返回 '12:34:56'。 |
格式替换
在 $STRFTIME 中将以下替换项与字面分隔符组合。例如,'%Y-%m-%d %H:%M:%S' 会同时格式化日期和时间。不支持的替换返回 NULL。
| 替换 | 含义 |
|---|---|
%d
|
月中的日期,01-31。 |
%H
|
小时,00-24。 |
%f
|
带小数部分的秒,SS.SSS。 |
%j
|
一年中的第几天,001-366。 |
%J
|
儒略日数。 |
%m
|
月份,01-12。 |
%M
|
分钟,00-59。 |
%s
|
自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数。 |
%S
|
秒,00-59。 |
%w
|
星期几,0-6;星期日为 0。 |
%W
|
一年中的周数,00-53;每周从星期一开始。 |
%Y
|
年份,0000-9999。 |
%%
|
百分号字面量。 |
数据丰富函数
使用查找从源端点或目标端点中的表中添加关联值(例如部门名称)。
| 函数 | 行为与参数 | 示例和结果 |
|---|---|---|
$SOURCE_LOOKUP(time_to_live, schema, table, expression, condition, condition_params)
|
针对与 condition 匹配的记录,从 schema 中源端点的 table 检索 expression 的值。条件参数按顺序为其占位符提供值。 |
$SOURCE_LOOKUP(60, 'HR', 'DEPARTMENTS', 'DEPARTMENT_NAME', 'DEPARTMENT_ID=:1', $DEPARTMENT_ID) 从源中检索匹配的部门名称。 |
$TARGET_LOOKUP(time_to_live, schema, table, expression, condition, condition_params)
|
针对与 condition 匹配的记录,从目标端点的 table(位于 schema 中)检索 expression 的值。条件参数按顺序为其占位符提供值。 |
$TARGET_LOOKUP(60, 'dbo', 'DEPARTMENTS', 'DEPARTMENT_NAME', 'DEPARTMENT_ID=?', $DEPARTMENT_ID) 从目标中检索匹配的部门名称。 |
condition_params 表示以逗号分隔的参数列表,而不是单个数组参数。这两个函数都使用以下参数:
| 参数 | 含义 |
|---|---|
time_to_live
|
必需的缓存生命周期,无默认值。提供以秒为单位的缓存生命周期, 较短的生命周期可刷新频繁更改的数据。更长的生命周期可以减少端点查询,但在查找数据发生更改后可能会返回缓存值。仅对不会更改的数据使用永不过期。 |
schema
|
包含查找表的架构,以文本形式提供。 |
table
|
该架构内要查询的表,以文本形式提供。 |
expression
|
选择单个列值的 SQL 表达式,例如 'DEPARTMENT_NAME' 或 'PRICE * 1.2'。使用所访问端点的 SQL 方言,而不是外层表达式的函数语法。 |
condition
|
用于标识查找记录的 SQL 条件。使用所访问端点的方言和占位符语法:例如,Oracle 使用 :1 和 :2,或者适用于 Microsoft SQL Server 的 ?。 |
condition_params
|
按顺序绑定到条件占位符的值。诸如 $COMPANY_ID 和 $DEPARTMENT_ID 等列参数提供来自当前行的值。 |
为查找字段创建索引以降低查询成本。选择用于标识目标记录的条件,并将添加的列的数据类型设置为与所选值匹配。
源查找示例
对于 Oracle 数据源,以下表达式从 HR.DEPARTMENTS 检索 DEPARTMENT_NAME 并将结果缓存 60 秒:
$SOURCE_LOOKUP(60, 'HR', 'DEPARTMENTS', 'DEPARTMENT_NAME', 'DEPARTMENT_ID=:1', $DEPARTMENT_ID)
如果当前行包含 DEPARTMENT_ID 10,且匹配的查找记录包含 'Sales',则结果为 'Sales'。
对于 Microsoft SQL Server 源,请使用其条件占位符语法。本示例按此顺序绑定公司和部门的值:
$SOURCE_LOOKUP(60, 'dbo', 'DEPARTMENTS', 'DEPARTMENT_NAME', 'COMPANY_ID=? AND DEPARTMENT_ID=?', $COMPANY_ID, $DEPARTMENT_ID)
目标查找示例
对于 Microsoft SQL Server 目标,使用其 SQL 方言查询目标表:
$TARGET_LOOKUP(60, 'dbo', 'DEPARTMENTS', 'DEPARTMENT_NAME', 'DEPARTMENT_ID=?', $DEPARTMENT_ID)
如果部门 10 的目标查找记录包含 'Sales',则输入值为 10 的结果为 'Sales'。
运算函数
| 函数 | 行为与参数 | 示例和结果 |
|---|---|---|
$OPERATION_INDICATOR(value_on_delete, value_on_update, value_on_insert)
|
返回您为每个源操作指定的标志。参数顺序为删除、更新,然后是插入。使用专用列存储标志,并提供与其数据类型匹配的标志值。 | $OPERATION_INDICATOR('Deleted', 'Updated', 'Inserted') 在更新时返回 'Updated'。 |
在 Qlik Replicate 中,此函数还会更改删除处理方式:它会保留相应的目标记录,并使用 value_on_delete 对其进行标记。对于 Qlik Talend Cloud Data Integration,此删除处理行为需要确认。
逻辑函数
| 函数 | 行为与参数 | 示例和结果 |
|---|---|---|
$IFF(boolean_expression, true_value, false_value)
|
如果 boolean_expression 的计算结果为 true,则返回 true_value;否则返回 false_value。首先提供条件,后跟两个结果值。 |
$IFF(10 > 5, 'High', 'Low') 返回 'High'。$IFF(3 > 5, 'High', 'Low') 返回 'Low'。 |
其他功能
| 函数 | 行为与参数 | 示例和结果 |
|---|---|---|
$LIKE(pattern, string[, escape_character])
|
匹配时返回 1,不匹配时返回 0;输入 NULL 则返回 NULL。% 匹配零个或多个字符;_ 匹配一个字符。匹配默认忽略 ASCII 字母大小写。可选的转义符为一个字符。与 LIKE 运算符不同,模式排在前面。 |
$LIKE('A%', 'Alice') 返回 1。$LIKE('10!%', '10%', '!') 返回 1。 |
$TYPEOF(expression)
|
返回值的存储类:'null'、'integer'、'real'、'text' 或 'blob'。这不是配置的输出列类型。 |
$TYPEOF(12.5) 返回 'real'。 |
哈希函数
| 函数 | 行为与参数 | 示例和结果 |
|---|---|---|
$SHA256(string)
|
返回输入字符串的十六进制 SHA-256 哈希值。 | $SHA256('abc') 返回 ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad。 |
哈希不是加密。可预测的输入值仍然可以通过比较其哈希值来识别。