---
title: "预处理函数 | OceanBase 文档中心"
description: "预处理函数 定义控制文件时，用户可以为每一个列配置对应的预处理函数。 注意事项 任何预处理函数的形式参数中只能引用当前列的值，暂不支持跨列引用。例如：不支持 c14 &quot;concat(c15, &#x27;_suffix&#x27;)&quot; ，仅支持 c15 &quot;concat(c15, &#x27;_suffix&#x27;)&quot; 。 预处理函数 LPADB() 和…"
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*eAudSaxX8P0AAAAAAAAAAAAADiGDAQ/original) 导数工具V 4.0.0 企业版

# 预处理函数

更新时间：2023-06-30 21:27:56

定义控制文件时，用户可以为每一个列配置对应的预处理函数。

## 注意事项

- 任何预处理函数的形式参数中只能引用当前列的值，暂不支持跨列引用。例如：不支持 `c14 "concat(c15, '_suffix')"`，仅支持 `c15 "concat(c15, '_suffix')"`。
 - 预处理函数 `LPADB()` 和 `RPADB()` 适用于字母、数字和中文等字符，处理 Emoji 表情符号时可能会出现截断。
 - 预处理函数 `REPLACE()` 在导数工具中的表现不同于在 Oracle 和 MySQL 中。其语法上更接近 Oracle，实现上更接近 MySQL。
 - 预处理函数 `NVL()` 参考了 MySQL 中对应的内置函数，它在实现上是区分了空字符和 NULL。
 - 与日期时间相关的预处理函数（`SYSTIMESTAMP`、`TMSFMT()` 和 `TO_TIMESTAMP()` 等）只能精确到毫秒。此外，要求工具运行的服务器时钟与数据库服务器时钟相同。
 - 预处理函数 `LPAD(char,length[,pad_string])` 和 `RPAD(char,length[,pad_string])` 参考了 MySQL 中对应的内置函数。参数 length 是最终显示在终端上的返回值的总长度。在大多数字符集中，这会是返回值中的字符数。但是，在某些多字节字符集中，字符串的显示长度可能与字符串中实际的字符数不同，所以此函数在处理多字节值时是不安全的。

## 函数列表

当前版本支持的预处理函数如下：

| **函数签名** | **返回类型** | **描述** |
| --- | --- | --- |
| LOWER(char) | String | 对参数值中的字母转换为小写。 参数值可以是列名、常量或者嵌套表达式。当参数值是常量时，请使用单引号。    示例：`LOWER('A')`。 |
| LTRIM(char[,set]) | String | 对参数值从左到右进行匹配并截断操作。 参数 `char` 的值可以是列名、常量或函数表达式。参数 `set` 的值是常量。若省略参数 `set`，则默认按照空格进行匹配。    示例：`LTRIM(' abc ')`。 |
| RTRIM(char[,set]) | String | 对参数值从右到左进行匹配并截断操作。 参数 `char` 的值可以是列名、常量或函数表达式，参数 `set` 的值是常量。若省略参数 `set`，则默认按照空格进行匹配。    示例：`RTRIM(' abc ')`。 |
| SUBSTR(char,position[,length ]) | String | 对参数值根据起始位置与长度进行截断。 参数 `char` 的值可以是列名、常量或函数表达式，参数 `position` 的值是数值型常量，参数 `length` 的值是数值型常量。    示例：`SUBSTR('abc',0,3)`。 |
| TRIM(char) | String | 对参数值的左右两端进行空格截断。参数 `char` 的值可以是列名、常量或函数表达式。    示例：`TRIM(' abc ')`。 |
| REVERSE(char) | String | 对参数值进行逆序操作。    示例：`REVERSE("C1")` 将颠倒 C1 列值的字符串顺序。 |
| UPPER(char) | String | 对参数值中的字母转换为大写。 参数 `char` 的值可以是列名、常量或者嵌套表达式。当值为常量时，请使用单引号。    示例：`UPPER('a')`。 |
| NANVL(char, default) | String | 对参数值进行数值合法验证，若验证失败，则返回默认值。 参数 `char` 的值可以是列名、常量或函数表达式，参数 `default` 的值是常量。    示例：`NANVL('1','1')`。 |
| REPLACE(char,search[,replacement ]) | String | 对参数值根据搜索条件进行替换。 参数 `char` 的值可以是列名、常量或函数表达式，参数 `search` 的值是常量，参数 `replacement` 的值是常量。    示例：`REPLACE('abc','a','A')`。 |
| NVL(char, default) | String | 对参数值进行判空，若为空，则返回默认值。 参数 `char` 的值可以是列名、常量或函数表达式，参数 `default` 的值是常量。    示例：`NVL('a','--')`。 |
| TO_TIMESTAMP(char,fmt1[,fmt2]) | String | 对参数值进行日期格式化，若转换失败返回 `NULL`。 参数 `char` 的值可以是列名、常量或函数表达式，参数 `fmt1` 的值是日期解析模板，可选参数 `fmt2` 的值是日期格式化模板。    参数 `fmt2` 返回值的默认格式：yyyy-MM-dd HH:mm:ss.SSS。 |
| LENGTH(char) | String | 对参数值进行长度计算。 参数 `char` 的值可以是列名、常量或函数表达式。 |
| LPAD(char,length[,pad_string]) | String | 对参数值从左侧追加指定长度的字符，若指定的长度小于参数长度则截断。 参数 `char` 的值可以是列名、常量或函数表达式，参数 `length` 和 `pad_string` 的值是常量，且参数 `pad_string` 的值要求传入单字节字符。    示例：`LPAD('a',1,'x')`。 |
| RPAD(char,length[,pad_string]) | String | 对参数值从右侧追加指定长度的字符，指定的长度小于参数长度则截断。 参数 `char` 的值可以是列名、常量或函数表达式，参数 `length` 和 `pad_string` 的值是常量，且参数 `pad_string` 的值要求传入单字节字符。    示例：`RPAD('a',1,'x')`。 |
| CONVERT(char,charset1[,charset2]) | String | 对参数值进行字符编码转换。 参数 `char` 的值可以是列名、常量或函数表达式，参数 `charset1` 和 `charset2` 的值是常量。    示例：`CONVERT('a','utf-8','gbk')`。 |
| CONCAT(char1,char2) | String | 对参数值进行拼接。 参数 `char1` 和 `char2` 的值可以是列名、常量或函数表达式。    示例：`CONCAT('a','b')`。 |
| NONE | String | 对参数不作任何处理，直接返回参数值。 |
| SYSTIMESTAMP | String | 对参数不作任何处理，直接返回当前机器的时间戳。    默认格式：yyyy-MM-dd HH:mm:ss.SSS。 |
| SYSDATE | String | 对参数不作任何处理，直接返回当前机器的日期。    默认格式：yyyy-MM-dd HH:mm:ss。 |
| CONSTANT(char) | String | 对参数不作任何处理，直接返回定义的常量值。参数 `char` 的值是常量。    示例：`CONSTANT('1')`。 |
| TMSFMT(char,fmt1,default,fmt2) | String | 对参数进行日期格式验证，若验证失败，则返回默认的日期格式。    示例：`TMSFMT(c1,'yyyyMMddHHmmssSSS','2021-03-10 00:00:00.000','yyyy-MM-dd HH:mm:ss.SSS')`。 |
| LPADB(char,byte_size[,pad_char]) | String | 对参数值从左侧追加指定长度的字节，指定的长度小于参数长度则截断。 参数 `char` 的值可以是列名、常量或函数表达式，参数 `byte_size` 和 `pad_char` 的值是常量。    示例：`LPADB('a',1,'x')`。 |
| RPADB(char,byte_size[,pad_char]) | String | 对参数值从右侧追加指定长度的字节，指定的长度小于参数长度则截断。 参数 `char` 的值可以是列名、常量或函数表达式，参数 `byte_size` 和 `pad_char` 的值是常量。    示例：`RPADB('a',1,'x')`。 |
| MASK(string str[, string upper[, string lower[, string number]]]) | String | 对字段中的大小写字母、数字进行脱敏操作。    示例：`MASK("C1"，A，a，b)` ，将 C1 列的大写字母转换为字母 A，小写字母转化为 a，数字转换为 b。 |
| MASK_FIRST_N(string str[, int n]) | String | 指定对字段值的前 n 个字符进行脱敏操作。    示例：`MASK_FIRST_N("C1"，'A','a','b'，5)`，将 C1 列的前 5 个字符中的大写字母转换为字母 A，小写字母转化为 a，数字转换为 b。 |
| MASK_LAST_N(string str[, int n]) | String | 指定对字段值的后 n 个字符进行脱敏操作。    示例：`MASK_LAST_N("C1"，'A','a','b'，5)`，将 C1 列的后 5 个字符中的大写字母转换为字母 A，小写字母转化为 a，数字转换为 b。 |
| MASK_SHOW_FIRST_N(string str[, int n]) | String | 指定对除前 n 个字符之外的所有字符进行脱敏操作。    示例：`MASK_SHOW_FIRST_N("C1"，'A','a','b'，5)`，将 C1 列的除前 5 个字符之外的所有字符中的大写字母转换为字母 A，小写字母转化为 a，数字转换为 b。 |
| MASK_SHOW_LAST_N(string str[, int n]) | String | 指定对除后 n 个字符之外的所有字符进行脱敏操作。    示例：`MASK_SHOW_LAST_N("C1"，'A','a','b'，5)`，将 C1 列的除后 5 个字符之外的所有字符中的大写字母转换为字母 A，小写字母转化为 a，数字转换为 b。 |
| SEQUENCE(int m,int n) | String | 对指定的列生成递增的序列值，m 代表初始值，n 代表递增值。    示例：`SEQUENCE(100,1)` 生成初始值为 100，递增值为 1 的序列。 |

> **注意**
>  OBLOADER 3.x 版本不再支持 groovy 动态函数。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
