運算式函式
上次更新: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) 傳回四個位元組的 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)
|
若不為 NULL,則傳回 X;否則傳回 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)
|
將來自 time_string 的時間以 HH:MM:SS 格式傳回為文字。 |
$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 的記錄,從 schema 中目標端點的 table 擷取 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。 |
雜湊並非加密。可預測的輸入值仍可透過比對其雜湊值來識別。