---
title: "函数概述 - OceanBase 数据库 V4.2.4 | OceanBase 文档中心"
description: 函数概述 OceanBase 数据库内嵌的函数可以直接在 SQL 语句中使用。每个函数的入参传入值均有期望的数据类型，如果传入的数据类型不是期望的数据类型，则 OceanBase 数据库会在实际执行 SQL 函数之前尝试将参数传入的数值转换为期望的数据类型。 函数与运算符相似，即给定一些数据元素作为参数的输入并返回结…
---
切换语言

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

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.2.4

# 函数概述

更新时间：2025-09-16 11:26:45

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.2.4/zh-CN/700.reference/500.sql-reference/100.sql-syntax/300.common-tenant-of-oracle-mode/500.functions-of-oracle-mode/100.function-overview-of-oracle-mode.md)  

OceanBase 数据库内嵌的函数可以直接在 SQL 语句中使用。每个函数的入参传入值均有期望的数据类型，如果传入的数据类型不是期望的数据类型，则 OceanBase 数据库会在实际执行 SQL 函数之前尝试将参数传入的数值转换为期望的数据类型。

函数与运算符相似，即给定一些数据元素作为参数的输入并返回结果。然而函数在入参形式上与运算符有比较大的区别。函数允许包含的参数数量不定，一个函数里可以有一到两个，甚至更多的参数。

```sql
函数名（参数，参数，...）

```

函数也可以没有任何参数，类似于伪列。但是，伪列通常为结果集中的每一行返回不同的值，而没有任何变量的函数通常为每一行返回相同的值。

#### 注意

在 SQL 语句中对 `LOB` 列使用函数时，OceanBase 数据库将在 SQL 和 PL 处理期间创建临时 `LOB` 列，并有一定的使用限制，详情信息请参见 [与 Oracle 兼容性对比](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001033109)。

本章中函数分成了两大类，每一类函数的参数和最终的函数返回值都有其特定的数据类型：

- **单行函数** ：包括数字函数、返回字符串的字符串函数、返回数字的字符串函数、时间日期函数、通用比较函数、转换函数、编码解码函数、空值相关函数、环境和标识函数以及层次函数等。
 - **统计函数** ：包括聚合函数和分析函数。

单行函数对于被查询的表或者视图每一行均返回一个结果值，这些函数可以使用在 SQL 语句的 `SELECT`、`WHERE`、`START WITH`、`CONNECT BY`、`HAVING` 等子句当中。

分析函数与聚合函数，都是对行集组（一组行的集合）进行聚合计算。不同的是，聚合函数每组只能返回一个值（一行），而分析函数每组可以返回多个值（多行）。行集组又称为窗口（Window）。聚合函数通常和 `SELECT` 语句中的 `GROUP BY` 子句一起使用，使用时数据库将查询表或视图的行分为几组，并将聚合函数应用于每组行，同时为每组返回一个结果行。

使用分析函数时需要用特殊的关键字 `OVER` 来指定窗口。更多关于窗后函数的信息，请参见 [分析函数说明](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001037698)。

## 数字函数

数字函数的变量输入与函数输出结果均为数字类型，绝大部分的数字函数的返回值的数据类型为 `NUMBER`，可以精确到小数点后 38 位。一些高等代数相关函数 `COS()`、`COSH()`、`EXP()`、`LN()`、`LOG()`、`SIN()`、`SINH()`、`SQRT()`、`TAN()`、`TANH()` 等函数的结果精确到小数点后 36 位，其他代数相关函数 `ACOS()`，`ASIN()`，`ATAN()` 和 `ATAN2()`。其结果返回值精确到小数点后 30 位。

## 返回字符串的字符串函数

函数的返回值的最大长度受数据类型的影响、例如，函数的返回值的数据类型是 `VARCHAR2`，但是返回值实际的大小超过了 `VARCHAR2` 数据类型的最大限制，此时 OceanBase 数据库会对结果进行截断处理并返回，但是在客户端上并不会提示。

#### 注意

如果返回值的数据类型是 `CLOB`，当返回值长度超过了最大限制时，OceanBase 数据库不会返回数据且显示错误提示。

## 返回数字的字符串函数

返回数字的字符串函数根据指定条件的返回数字，例如 ASCII 码值、字符（串）的位置等。

## 时间日期函数

时间日期函数支持的入参数据类型有三类，包括日期时间 (`DATE`)、时间戳 (`TIMESTAMP`、`TIMESTAMP WITH TIME ZONE`、`TIMESTAMP WITH LOCAL TIME ZONE`)，以及间隔 (`INTERVAL DAY TO SECOND`、`INTERVAL YEAR TO MONTH`)。

仅支持 `DATE` 数据类型输入参数的函数包括：`ADD_MONTHS`、`CURRENT_DATE, LAST_DAY` 和 `NEXT_DAY`。

如果对于以上函数，您尝试给入的是 `TIMESTAMP` 类型的数据，OceanBase 数据库内部会先进行隐式数据类型转换后带入函数进行运算，并返回 `DATE` 类型的返回值。

在使用时间日期函数前，建议执行 `SELECT * FROM NLS_DATABASE_PARAMETERS` 查看当前的 NLS 格式，如下所示：

```sql
obclient> SELECT * FROM NLS_DATABASE_PARAMETERS;
+-------------------------+------------------------------+
| PARAMETER               | VALUE                        |
+-------------------------+------------------------------+
| NLS_DATE_FORMAT         | DD-MON-RR                    |
| NLS_TIMESTAMP_FORMAT    | YYYY-MM-DD HH24:MI:SS        |
| NLS_TIMESTAMP_TZ_FORMAT | DD-MON-RR HH.MI.SSXFF AM TZR |
| NLS_TERRITORY           | AMERICA                      |
| NLS_SORT                | BINARY                       |
| NLS_COMP                | BINARY                       |
| NLS_CHARACTERSET        | AL32UTF8                     |
| NLS_NCHAR_CHARACTERSET  | AL16UTF16                    |
| NLS_DATE_LANGUAGE       | AMERICAN                     |
| NLS_LENGTH_SEMANTICS    | BYTE                         |
| NLS_NCHAR_CONV_EXCP     | FALSE                        |
| NLS_CALENDAR            | GREGORIAN                    |
| NLS_NUMERIC_CHARACTERS  | .,                           |
+-------------------------+------------------------------+
13 rows in set

```

如果与文中示例的显示格式不一致，可以执行如下命令更改格式：

```sql
obclient>ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
Query OK, 0 rows affected

obclient>ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF';
Query OK, 0 rows affected
/*将返回值中秒的小数位设置为 9 位*/

obclient> ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF TZR TZD';
Query OK, 0 rows affected

```

#### 注意

- `MONTHS_BETWEEN` 返回值为 1 个数字。
 - `ROUND` 和 `TRUNC` 并不能进行隐式转换，必须传输 `DATE` 类型的数值，否则会报错。

剩余的函数对于三种参数数据类型均可以支持，且返回和输入参数相同的数据类型。

## 通用比较函数

可以通过本类别函数快速的在集合中寻找到最大值和最小值。

## 转换函数

可以通过本类型的函数将原本的数据类型转换为另外一种数据类型。

## 编码解码函数

可以通过本类型的函数在 OceanBase 数据库中实现数据的编码解密需求

## 空值相关函数

空值相关函数用于处理参数中的空值。对于绝大多数的函数当入参为空值 `NULL` 的时候，其返回的结果也为 `NULL`。这种情况下，您可以使用 `NVL` 函数返回一个非空值。例如，一张记录佣金的表的佣金列 `commission_pct` 为空值 `NULL`，则表达式`NVL(commission_pct，0)` 返回 0；如果 `commission_pct` 的值不为 `NULL`，则返回实际的佣金值。

## 环境相关函数

环境相关函数主要提供会话或者租户实例相关的环境信息。

## 层次函数

| 函数分类 | **函数子分类** | **函数名** 称 | **功能描述** |
| --- | --- | --- | --- |
| 单行函数 | 层次函数 | SYS_CONNECT_BY_PATH | 返回从根到节点的列值的路径，由 `CONNECT BY` 条件返回的每一行的列值用指定分隔符号分隔。 |

## JSON 函数

JSON 函数对 JSON 值进行创建、操作和搜索等操作。

## XML 函数

XML 函数可以高效地查询、更新和搜索 XML 文档。

## 聚合函数

聚合函数对一组值执行计算并返回单一的值。聚合函数忽略空值。聚合函数经常与 `SELECT` 语句的 `GROUP BY` 子句一同使用。

## 分析函数

分析函数（某些数据库下也叫做窗口函数）与聚合函数类似，计算总是基于一组行的集合，不同的是，聚合函数一组只能返回一行，而分析函数每组可以返回多行，组内每一行都是基于窗口的逻辑计算的结果。分析函数可以显著优化需要 Self-Join 的查询。

 上一篇 下一篇 ![有帮助](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) 咨询热线
