2023-12-01 09:52:29 +00:00
---
2025-08-19 04:41:37 +00:00
sidebar_label: 内置函数
title: 内置函数
2025-08-14 04:22:42 +00:00
description: TDengine TSDB 支持的函数列表
2023-12-01 09:52:29 +00:00
toc_max_heading_level: 4
---
2025-08-21 05:42:57 +00:00
## 标量函数
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
标量函数为查询结果中的每一行返回一个结果行。
2023-12-01 09:52:29 +00:00
### 数学函数
#### ABS
```sql
ABS(expr)
```
**功能说明**:获得指定字段的绝对值。
**返回结果类型**:与指定字段的原始数据类型一致。
**适用数据类型**:数值类型。
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
**使用说明**: 只能与普通列, 选择( Selection) 、投影( Projection) 函数一起使用, 不能与聚合( Aggregation) 函数一起使用。
#### ACOS
```sql
ACOS(expr)
```
**功能说明**:获得指定字段的反余弦结果。
**返回结果类型**: DOUBLE。
**适用数据类型**:数值类型。
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
**使用说明**: 只能与普通列, 选择( Selection) 、投影( Projection) 函数一起使用, 不能与聚合( Aggregation) 函数一起使用。
#### ASIN
```sql
ASIN(expr)
```
**功能说明**:获得指定字段的反正弦结果。
**返回结果类型**: DOUBLE。
**适用数据类型**:数值类型。
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
**使用说明**: 只能与普通列, 选择( Selection) 、投影( Projection) 函数一起使用, 不能与聚合( Aggregation) 函数一起使用。
#### ATAN
```sql
ATAN(expr)
```
**功能说明**:获得指定字段的反正切结果。
**返回结果类型**: DOUBLE。
**适用数据类型**:数值类型。
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
**使用说明**: 只能与普通列, 选择( Selection) 、投影( Projection) 函数一起使用, 不能与聚合( Aggregation) 函数一起使用。
#### CEIL
```sql
CEIL(expr)
```
**功能说明**:获得指定字段的向上取整数的结果。
**返回结果类型**:与指定字段的原始数据类型一致。
**适用数据类型**:数值类型。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**使用说明**: 只能与普通列, 选择( Selection) 、投影( Projection) 函数一起使用, 不能与聚合( Aggregation) 函数一起使用。
2023-12-01 09:52:29 +00:00
#### COS
```sql
COS(expr)
```
**功能说明**:获得指定字段的余弦结果。
**返回结果类型**: DOUBLE。
**适用数据类型**:数值类型。
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
**使用说明**: 只能与普通列, 选择( Selection) 、投影( Projection) 函数一起使用, 不能与聚合( Aggregation) 函数一起使用。
2025-03-10 06:14:20 +00:00
#### DEGREES
2023-12-01 09:52:29 +00:00
```sql
2025-03-10 06:14:20 +00:00
DEGREES(expr)
2023-12-01 09:52:29 +00:00
```
2025-03-10 06:14:20 +00:00
**功能说明**:计算指定参数由弧度值转为角度后的值。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**版本**: v3.3.3.0
2023-12-01 09:52:29 +00:00
**返回结果类型**: DOUBLE。
**适用数据类型**:数值类型。
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- 如果 `expr` 为 NULL, 则返回 NULL。
- degree = radian * 180 / π。
- 只能与普通列, 选择( Selection) 、投影( Projection) 函数一起使用, 不能与聚合( Aggregation) 函数一起使用。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**举例**:
2025-08-14 04:24:16 +00:00
2023-12-01 09:52:29 +00:00
```sql
2025-03-10 06:14:20 +00:00
taos> select degrees(PI());
degrees(pi()) |
============================
180.000000000000000 |
2023-12-01 09:52:29 +00:00
```
2025-03-10 06:14:20 +00:00
#### EXP
2023-12-01 09:52:29 +00:00
```sql
2025-03-10 06:14:20 +00:00
EXP(expr)
2023-12-01 09:52:29 +00:00
```
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
**功能说明**:返回 e( 自然对数的底) 的指定乘方后的值。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**版本**: v3.3.3.0
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**返回结果类型**: DOUBLE。
2024-09-11 00:05:54 +00:00
2025-03-10 06:14:20 +00:00
**适用数据类型**:数值类型。
2024-09-11 00:05:54 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2024-09-11 00:05:54 +00:00
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- 如果 `expr` 为 NULL, 返回 NULL。
2024-09-11 00:05:54 +00:00
- 只能与普通列, 选择( Selection) 、投影( Projection) 函数一起使用, 不能与聚合( Aggregation) 函数一起使用。
**举例**:
2025-08-14 04:24:16 +00:00
2024-09-11 00:05:54 +00:00
```sql
2025-03-10 06:14:20 +00:00
taos> select exp(2);
exp(2) |
2024-09-11 00:05:54 +00:00
============================
2025-03-10 06:14:20 +00:00
7.389056098930650 |
2024-09-11 00:05:54 +00:00
```
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
#### FLOOR
2023-12-01 09:52:29 +00:00
```sql
2025-03-10 06:14:20 +00:00
FLOOR(expr)
2023-12-01 09:52:29 +00:00
```
2025-08-06 10:13:54 +00:00
**功能说明**:获得指定字段的向下取整数的结果。其他使用说明参见 [CEIL ](#ceil ) 函数描述。
2025-03-11 06:00:42 +00:00
#### GREATEST
2025-08-14 04:24:16 +00:00
2025-03-11 06:00:42 +00:00
```sql
GREATEST(expr1, expr2[, expr]...)
```
**功能说明**:获得输入的所有参数中的最大值。该函数最小参数个数为 2 个。
**使用说明**: ver-3.3.6.0
**返回结果类型**:参考比较规则,比较类型即为最终返回类型。
**适用数据类型**:
2025-08-14 04:24:16 +00:00
2025-03-11 06:00:42 +00:00
- 数值类型:包括 bool 型,整型和浮点型
- 字符串类型:包括 nchar 和 varchar 类型。
**比较规则**:以下规则描述了比较操作的转换方式:
2025-08-14 04:24:16 +00:00
2025-03-11 06:00:42 +00:00
- 如果有任何一个参数为 NULL, 则比较结果为 NULL。
- 如果比较操作中的所有参数都是字符串类型,按照字符串类型比较
- 如果所有参数都是数值类型,则将它们作为数值类型进行比较。
- 如果参数中既有字符串类型,也有数值类型,根据 compareAsStrInGreatest 配置项,统一作为字符串或者数值进行比较。默认按照字符串比较。
- 在所有情况下,不同类型比较,比较类型会选择范围更大的类型进行比较,例如作为整数类型比较时,如果存在 BIGINT 类型,必定会选择 BIGINT 作为比较类型。
**相关配置项**: 客户端配置, compareAsStrInGreatest 为 1 表示同时存在字符串类型和数值类型统一转为字符串比较,为 0 表示统一转为数值类型比较。默认为 1。
#### LEAST
2025-08-14 04:24:16 +00:00
2025-03-11 06:00:42 +00:00
```sql
LEAST(expr1, expr2[, expr]...)
```
**功能说明**:获得输入的所有参数中的最小值。其余部分说明同 [GREATEST ](#greatest ) 函数。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
#### LN
2023-12-01 09:52:29 +00:00
```sql
2025-03-10 06:14:20 +00:00
LN(expr)
2023-12-01 09:52:29 +00:00
```
2025-03-10 06:14:20 +00:00
**功能说明**:返回指定参数的自然对数。
**版本**: v3.3.3.0
2023-12-01 09:52:29 +00:00
**返回结果类型**: DOUBLE。
**适用数据类型**:数值类型。
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- 如果 `expr` 为 NULL, 返回 NULL。
- 如果 `epxr` 小于等于 0, 返回 NULL。
- 只能与普通列, 选择( Selection) 、投影( Projection) 函数一起使用, 不能与聚合( Aggregation) 函数一起使用。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**举例**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
```sql
taos> select ln(10);
ln(10) |
============================
2.302585092994046 |
```
#### LOG
2023-12-01 09:52:29 +00:00
```sql
2025-03-10 06:14:20 +00:00
LOG(expr1[, expr2])
2023-12-01 09:52:29 +00:00
```
2025-03-10 06:14:20 +00:00
**功能说明**:获得 expr1 对于底数 expr2 的对数。如果 expr2 参数省略,则返回指定字段的自然对数值。
2023-12-01 09:52:29 +00:00
**返回结果类型**: DOUBLE。
**适用数据类型**:数值类型。
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
**使用说明**: 只能与普通列, 选择( Selection) 、投影( Projection) 函数一起使用, 不能与聚合( Aggregation) 函数一起使用。
2025-03-10 06:14:20 +00:00
#### MOD
2024-09-11 00:05:54 +00:00
```sql
2025-03-10 06:14:20 +00:00
MOD(expr1, expr2)
2024-09-11 00:05:54 +00:00
```
2025-03-10 06:14:20 +00:00
**功能说明**:计算 expr1 % expr2 的结果。
2024-09-11 00:05:54 +00:00
2025-03-05 02:47:03 +00:00
**版本**: v3.3.3.0
2024-12-17 10:08:29 +00:00
2024-09-11 00:05:54 +00:00
**返回结果类型**: DOUBLE。
2025-03-10 06:14:20 +00:00
**适用数据类型**:数值类型。
2024-09-11 00:05:54 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2024-09-11 00:05:54 +00:00
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- 如果 `expr2` 为 0 则返回 NULL。
- 如果 `expr1` 或 `expr2` 为 NULL, 返回 NULL。
2024-09-11 00:05:54 +00:00
- 只能与普通列, 选择( Selection) 、投影( Projection) 函数一起使用, 不能与聚合( Aggregation) 函数一起使用。
**举例**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
``` sql
taos> select mod(10,3);
mod(10,3) |
2024-09-11 00:05:54 +00:00
============================
2025-03-10 06:14:20 +00:00
1.000000000000000 |
2024-09-11 00:05:54 +00:00
2025-03-10 06:14:20 +00:00
taos> select mod(1,0);
mod(1,0) |
============================
NULL |
2024-09-11 00:05:54 +00:00
```
2025-03-10 06:14:20 +00:00
#### PI
2024-09-11 00:05:54 +00:00
```sql
2025-03-10 06:14:20 +00:00
PI()
2024-09-11 00:05:54 +00:00
```
2025-03-10 06:14:20 +00:00
**功能说明**:返回圆周率 π 的值。
2024-09-11 00:05:54 +00:00
2025-03-05 02:47:03 +00:00
**版本**: v3.3.3.0
2024-12-17 10:08:29 +00:00
2024-09-11 00:05:54 +00:00
**返回结果类型**: DOUBLE。
2025-03-10 06:14:20 +00:00
**适用数据类型**:无。
2024-09-11 00:05:54 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2024-09-11 00:05:54 +00:00
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- π ≈ 3.141592653589793。
2024-09-11 00:05:54 +00:00
- 只能与普通列, 选择( Selection) 、投影( Projection) 函数一起使用, 不能与聚合( Aggregation) 函数一起使用。
**举例**:
2025-08-14 04:24:16 +00:00
2024-09-11 00:05:54 +00:00
```sql
2025-03-10 06:14:20 +00:00
taos> select pi();
pi() |
2024-09-11 00:05:54 +00:00
============================
2025-03-10 06:14:20 +00:00
3.141592653589793 |
2024-09-11 00:05:54 +00:00
```
2025-03-10 06:14:20 +00:00
#### POW
2024-09-11 00:05:54 +00:00
```sql
2025-03-10 06:14:20 +00:00
POW(expr1, expr2)
2024-09-11 00:05:54 +00:00
```
2025-03-10 06:14:20 +00:00
**功能说明**:获得 expr1 的指数为 expr2 的幂。
2024-12-17 10:08:29 +00:00
2024-09-11 00:05:54 +00:00
**返回结果类型**: DOUBLE。
**适用数据类型**:数值类型。
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2024-09-11 00:05:54 +00:00
2025-03-10 06:14:20 +00:00
**使用说明**: 只能与普通列, 选择( Selection) 、投影( Projection) 函数一起使用, 不能与聚合( Aggregation) 函数一起使用。
2024-09-11 00:05:54 +00:00
2025-03-10 06:14:20 +00:00
#### RADIANS
2024-09-11 00:05:54 +00:00
```sql
2025-03-10 06:14:20 +00:00
RADIANS(expr)
2024-09-11 00:05:54 +00:00
```
2025-03-10 06:14:20 +00:00
**功能说明**:计算指定参数由角度值转为弧度后的值。
2024-09-11 00:05:54 +00:00
2025-03-05 02:47:03 +00:00
**版本**: v3.3.3.0
2024-12-17 10:08:29 +00:00
2024-09-11 00:05:54 +00:00
**返回结果类型**: DOUBLE。
**适用数据类型**:数值类型。
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2024-09-11 00:05:54 +00:00
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- 如果 `expr` 为 NULL, 则返回 NULL。
- radian = degree * π / 180。
2024-09-11 00:05:54 +00:00
- 只能与普通列, 选择( Selection) 、投影( Projection) 函数一起使用, 不能与聚合( Aggregation) 函数一起使用。
**举例**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
```sql
taos> select radians(180);
radians(180) |
2024-09-11 00:05:54 +00:00
============================
2025-03-10 06:14:20 +00:00
3.141592653589793 |
2024-09-11 00:05:54 +00:00
```
#### RAND
2025-03-10 06:14:20 +00:00
2024-09-11 00:05:54 +00:00
```sql
RAND([seed])
```
2025-04-01 12:34:47 +00:00
**功能说明**:返回一个从 0 到 1 均匀分布的随机数。
2024-09-11 00:05:54 +00:00
2025-03-05 02:47:03 +00:00
**版本**: v3.3.3.0
2024-12-17 10:08:29 +00:00
2024-09-11 00:05:54 +00:00
**返回结果类型**: DOUBLE。
**适用数据类型**:
2025-08-14 04:24:16 +00:00
2024-09-11 00:05:54 +00:00
- `seed` : INTEGER。
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2024-09-11 00:05:54 +00:00
**使用说明**:
2025-08-14 04:24:16 +00:00
2024-09-11 00:05:54 +00:00
- 如果指定了 `seed` 值,那么将会用指定的 `seed` 作为随机种子,确保生成的随机数序列具有确定性。
- 只能与普通列, 选择( Selection) 、投影( Projection) 函数一起使用, 不能与聚合( Aggregation) 函数一起使用。
**举例**:
2025-08-14 04:24:16 +00:00
2024-09-11 00:05:54 +00:00
``` sql
taos> select rand();
rand() |
============================
0.202092426923147 |
taos> select rand();
rand() |
============================
0.131537788143166 |
taos> select rand(1);
rand(1) |
============================
0.000007826369259 |
taos> select rand(1);
rand(1) |
============================
0.000007826369259 |
```
2025-03-10 06:14:20 +00:00
#### ROUND
2024-09-11 00:05:54 +00:00
```sql
2025-03-10 06:14:20 +00:00
ROUND(expr[, digits])
2024-09-11 00:05:54 +00:00
```
2025-03-10 06:14:20 +00:00
**功能说明**:获得指定字段的四舍五入的结果。
2024-12-17 10:08:29 +00:00
2024-09-11 00:05:54 +00:00
**返回结果类型**:与指定字段的原始数据类型一致。
2025-03-10 06:14:20 +00:00
**适用数据类型**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- `expr` :数值类型。
- `digits` :数值类型。
2024-09-11 00:05:54 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2024-09-11 00:05:54 +00:00
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- 若 `expr` 或 `digits` 为 NULL, 返回 NULL。
- 若指定了`digits`,则会保留 `digits` 位小数,默认为 0。
- 若输入值是 INTEGER 类型,无论 `digits` 值为多少,都只会返回 INTEGER 类型,不会保留小数。
- `digits` 大于零表示对小数位进行操作,四舍五入到 `digits` 位小数。若小数位数小于 `digits` 位,不进行四舍五入操作,直接返回。
- `digits` 小于零表示丢掉小数位,并将数字四舍五入到小数点左侧 `digits` 位。若小数点左侧的位数小于 `digits` 位,返回 0。
- 由于暂未支持 DECIMAL 类型,所以该函数会用 DOUBLE 和 FLOAT 来表示包含小数的结果,但是 DOUBLE 和 FLOAT 是有精度上限的,当位数太多时使用该函数可能没有意义。
- 只能与普通列, 选择( Selection) 、投影( Projection) 函数一起使用, 不能与聚合( Aggregation) 函数一起使用。
- `digits` 从 v3.3.3.0 开始支持。
**举例**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
```sql
taos> select round(8888.88);
round(8888.88) |
============================
8889.000000000000000 |
taos> select round(8888.88,-1);
round(8888.88,-1) |
============================
8890.000000000000000 |
```
#### SIGN
```sql
SIGN(expr)
```
**功能说明**:返回指定参数的符号。
**版本**: v3.3.3.0
**返回结果类型**:与指定字段的原始数据类型一致。
**适用数据类型**:数值类型。
**嵌套子查询支持**:适用于内层查询和外层查询。
**适用于**:表和超级表。
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- 如果 `expr` 为负,返回 -1。
2025-02-14 07:50:53 +00:00
- 如果 `expr` 为正,返回 1。
2025-03-05 02:47:03 +00:00
- 如果 `expr` 为 0, 返回 0。
- 如果 `expr` 为 NULL, 返回 NULL。
2024-09-11 00:05:54 +00:00
- 只能与普通列, 选择( Selection) 、投影( Projection) 函数一起使用, 不能与聚合( Aggregation) 函数一起使用。
**举例**:
2025-08-14 04:24:16 +00:00
2024-09-11 00:05:54 +00:00
```sql
taos> select sign(-1);
sign(-1) |
========================
-1 |
taos> select sign(1);
sign(1) |
========================
1 |
taos> select sign(0);
sign(0) |
========================
0 |
```
2025-03-10 06:14:20 +00:00
#### SIN
2024-09-11 00:05:54 +00:00
```sql
2025-03-10 06:14:20 +00:00
SIN(expr)
2024-09-11 00:05:54 +00:00
```
2025-03-10 06:14:20 +00:00
**功能说明**:获得指定字段的正弦结果。
2024-09-11 00:05:54 +00:00
2025-03-10 06:14:20 +00:00
**返回结果类型**: DOUBLE。
**适用数据类型**:数值类型。
**嵌套子查询支持**:适用于内层查询和外层查询。
**适用于**:表和超级表。
**使用说明**: 只能与普通列, 选择( Selection) 、投影( Projection) 函数一起使用, 不能与聚合( Aggregation) 函数一起使用。
#### SQRT
```sql
SQRT(expr)
```
**功能说明**:获得指定字段的平方根。
2024-12-17 10:08:29 +00:00
2024-09-11 00:05:54 +00:00
**返回结果类型**: DOUBLE。
**适用数据类型**:数值类型。
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2024-09-11 00:05:54 +00:00
2025-03-10 06:14:20 +00:00
**使用说明**: 只能与普通列, 选择( Selection) 、投影( Projection) 函数一起使用, 不能与聚合( Aggregation) 函数一起使用。
#### TAN
2024-09-11 00:05:54 +00:00
```sql
2025-03-10 06:14:20 +00:00
TAN(expr)
2024-09-11 00:05:54 +00:00
```
2025-03-10 06:14:20 +00:00
**功能说明**:获得指定字段的正切结果。
**返回结果类型**: DOUBLE。
**适用数据类型**:数值类型。
**嵌套子查询支持**:适用于内层查询和外层查询。
**适用于**:表和超级表。
**使用说明**: 只能与普通列, 选择( Selection) 、投影( Projection) 函数一起使用, 不能与聚合( Aggregation) 函数一起使用。
2025-03-30 02:43:53 +00:00
#### TRUNCATE
2025-03-10 06:14:20 +00:00
2024-09-11 00:05:54 +00:00
```sql
2025-03-10 06:14:20 +00:00
TRUNCATE(expr, digits)
2024-09-11 00:05:54 +00:00
```
2025-03-10 06:14:20 +00:00
**功能说明**:获得指定字段按照指定位数截断的值。
2024-09-11 00:05:54 +00:00
2025-03-05 02:47:03 +00:00
**版本**: v3.3.3.0
2024-12-17 10:08:29 +00:00
2025-03-10 06:14:20 +00:00
**返回结果类型**:与 `expr` 字段的原始数据类型一致。
2024-09-11 00:05:54 +00:00
2025-03-10 06:14:20 +00:00
**适用数据类型**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- `expr` :数值类型。
- `digits` :数值类型。
2024-09-11 00:05:54 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2024-09-11 00:05:54 +00:00
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- 若 `expr` 或 `digits` 为 NULL, 返回 NULL。
- 截取指按保留位数直接进行截取,没有四舍五入。
- `digits` 大于零表示对小数位进行操作,截取到 `digits` 位小数,若小数位数小于 `digits` 位,不进行截取操作,直接返回。
- `digits` 等于零表示丢掉小数位。
- `digits` 小于零表示丢掉小数位,并将小数点左侧 `digits` 位置 `0` 。若小数点左侧的位数小于 `digits` 位,返回 0。
- 由于暂未支持 DECIMAL 类型,所以该函数会用 DOUBLE 和 FLOAT 来表示包含小数的结果,但是 DOUBLE 和 FLOAT 是有精度上限的,当位数太多时使用该函数可能没有意义。
2024-09-11 00:05:54 +00:00
- 只能与普通列, 选择( Selection) 、投影( Projection) 函数一起使用, 不能与聚合( Aggregation) 函数一起使用。
**举例**:
2025-08-14 04:24:16 +00:00
2024-09-11 00:05:54 +00:00
```sql
2025-03-10 06:14:20 +00:00
taos> select truncate(8888.88, 0);
truncate(8888.88, 0) |
2024-09-11 00:05:54 +00:00
============================
2025-03-10 06:14:20 +00:00
8888.000000000000000 |
taos> select truncate(8888.88, -1);
truncate(8888.88, -1) |
============================
8880.000000000000000 |
2024-09-11 00:05:54 +00:00
```
2025-03-10 06:14:20 +00:00
2025-09-26 02:46:42 +00:00
#### CORR
```sql
CORR(expr1, expr2)
```
2025-10-09 05:58:12 +00:00
**功能说明**: 计算两列数据之间的皮尔逊相关系数( Pearson correlation coefficient) , 该数值反映了两个序列之间的线性关系强度和方向, 返回结果在 -1 和 1 之间。
2025-09-26 02:46:42 +00:00
**版本**: v3.3.8.0
**返回结果类型**: double 类型。
**适用数据类型**:
- `expr1` :数值类型。
- `expr2` :数值类型。
**嵌套子查询支持**:适用于内层查询和外层查询。
**适用于**:表和超级表。
**使用说明**:
- 若 `expr1` 或 `expr2` 为 NULL, 返回 NULL。
**举例**:
```sql
taos> select k, j from test_corr;
k | j |
============================
1 | 2 |
2 | 3 |
3 | 5 |
4 | 7 |
5 | 8 |
taos> select corr(k, j) from test_corr;
corr(k,j) |
============================
0.992277876713668 |
```
2025-08-21 05:42:57 +00:00
### 位运算函数
2025-03-25 00:05:26 +00:00
#### CRC32
```sql
CRC32(expr)
```
2025-08-14 04:24:16 +00:00
2025-04-19 06:59:01 +00:00
**功能说明**: 传回代表循环冗余检查 (CRC) 的无符号 32 位整数。
2025-03-25 00:05:26 +00:00
2025-04-19 06:59:01 +00:00
**返回结果类型**: 无符号 32 位整数。
2025-03-25 00:05:26 +00:00
2025-04-09 23:25:50 +00:00
**适用数据类型**: 适用于任何类型。
2025-03-25 00:05:26 +00:00
**嵌套子查询支持**: 适用于内层查询和外层查询。
**适用于**: 表和超级表。
**使用说明**:
2025-04-18 11:21:30 +00:00
- 如果 expr 为 NULL, 则返回 NULL。
- 如果 expr 是空字符串,返回 0。
2025-05-09 01:31:35 +00:00
- 如果 `expr` 是非字符串,则将其解释为字符串后进行计算。
2025-04-18 11:21:30 +00:00
- 该函数是多字节安全的。
2025-03-25 00:05:26 +00:00
**举例**:
```sql
taos> select crc32(NULL);
crc32(null) |
==============
NULL |
taos> select crc32("");
crc32("") |
==============
0 |
taos> select crc32(123);
crc32(123) |
==============
2025-05-02 12:57:55 +00:00
2286445522 |
2025-03-25 00:05:26 +00:00
taos> select crc32(123.456);
crc32(123.456) |
=================
2025-05-02 12:57:55 +00:00
844093190 |
taos> select crc32(TO_TIMESTAMP("2000-01-01", "yyyy-mm-dd hh24:mi:ss"));
crc32(to_timestamp("2000-01-01", "yyyy-mm-dd hh24:mi:ss")) |
=============================================================
2274736693 |
2025-03-25 00:05:26 +00:00
taos> select crc32("This is a string");
crc32("This is a string") |
============================
141976383 |
2025-04-18 11:21:30 +00:00
taos> select crc32("这是一个字符串");
crc32("这是一个字符串") |
2025-04-19 06:59:01 +00:00
========================
1902862441 |
2025-03-25 00:05:26 +00:00
taos> select crc32(col_name) from ins_columns limit 10;
crc32(col_name) |
==================
3208210256 |
3292663675 |
3081158046 |
1063017838 |
2063623452 |
3996452140 |
2559042119 |
3485334036 |
3208210256 |
3292663675 |
```
2023-12-01 09:52:29 +00:00
### 字符串函数
字符串函数的输入参数为字符串类型,返回结果为数值类型或字符串类型。
2025-03-10 06:14:20 +00:00
#### ASCII
```sql
ASCII(expr)
```
**功能说明**:返回字符串第一个字符的 ASCII 码。
**版本**: v3.3.3.0
**返回结果数据类型**: BIGINT。
**适用数据类型**: VARCHAR、NCHAR。
**嵌套子查询支持**:适用于内层查询和外层查询。
**适用于**:表和超级表。
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- 如果 `expr` 为 NULL, 返回 NULL。
- 如果 `expr` 的第一个字符为多字节字符,只会返回该字符第一个字节的值对应的 ASCII 码。
**举例**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
```sql
taos> select ascii('testascii');
ascii('testascii') |
=====================
116 |
```
#### CHAR
2025-03-10 06:50:34 +00:00
2025-03-10 06:14:20 +00:00
```sql
CHAR(expr1 [, expr2] [, epxr3] ...)
```
**功能说明**:将输入参数当作整数,并返回这些整数在 ASCII 编码中对应的字符。
**版本**: v3.3.3.0
**返回结果类型**: VARCHAR。
2025-04-01 12:34:47 +00:00
**适用数据类型**: 整数类型, VARCHAR、NCHAR。
2025-03-10 06:14:20 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
**适用于**:表和超级表。
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- 输入的值超过 255 会被转化成多字节的结果,如 `CHAR(256)` 等同于 `CHAR(1,0)` 、`CHAR(256 * 256)` 等同于 `CHAR(1,0,0)` 。
- 输入参数的 NULL 值会被跳过。
- 输入参数若为字符串类型,会将其转换为数值类型处理。
- 若输入的参数对应的字符为不可打印字符,返回值中仍有该参数对应的字符,但是可能无法显示出来。
- 输入参数的个数上限为 2^31 - 1 个。
**举例**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
```sql
taos> select char(77);
char(77) |
===========
M |
taos> select char(77,77);
char(77,77) |
==============
MM |
taos> select char(77 * 256 + 77);
char(77 * 256 + 77) |
======================
MM |
taos> select char(77,NULL,77);
char(77,null,77) |
===================
MM |
```
2023-12-01 09:52:29 +00:00
#### CHAR_LENGTH
```sql
CHAR_LENGTH(expr)
```
**功能说明**:以字符计数的字符串长度。
**返回结果类型**: BIGINT。
2025-02-14 07:50:53 +00:00
**适用数据类型**: VARCHAR、NCHAR。
2023-12-01 09:52:29 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
2024-09-11 00:05:54 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2024-09-11 00:05:54 +00:00
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-02-14 07:50:53 +00:00
- 与 `LENGTH()` 函数不同在于,对于多字节字符,比如中文字符,`CHAR_LENGTH()` 函数会将其算做一个字符,长度为 1, 而 `LENGTH()` 会计算其字节数,长度为 3。比如 `CHAR_LENGTH('你好') = 2` , `LENGTH('你好') = 6`。
2024-09-11 00:05:54 +00:00
- 如果 `expr` 为 NULL, 返回 NULL。
**举例**:
2025-08-14 04:24:16 +00:00
2024-09-11 00:05:54 +00:00
```sql
taos> select char_length('Hello world');
char_length('Hello world') |
=============================
11 |
taos> select char_length('你好 世界');
char_length('你好 世界') |
===============================
5 |
```
2023-12-01 09:52:29 +00:00
#### CONCAT
```sql
CONCAT(expr1, expr2 [, expr] ... )
```
**功能说明**:字符串连接函数。
2025-04-01 12:34:47 +00:00
**返回结果类型**:如果所有参数均为 VARCHAR 类型,则结果类型为 VARCHAR。如果参数包含 NCHAR 类型,则结果类型为 NCHAR。如果参数包含 NULL 值,则输出值为 NULL。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**适用数据类型**: VARCHAR、NCHAR。该函数最小参数个数为 2 个,最大参数个数为 8 个。
2023-12-01 09:52:29 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
#### CONCAT_WS
```sql
CONCAT_WS(separator_expr, expr1, expr2 [, expr] ...)
```
**功能说明**:带分隔符的字符串连接函数。
2025-02-14 07:50:53 +00:00
**返回结果类型**:如果所有参数均为 VARCHAR 类型,则结果类型为 VARCHAR。如果参数包含 NCHAR 类型,则结果类型为 NCHAR。如果参数包含 NULL 值,则输出值为 NULL。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**适用数据类型**: VARCHAR、NCHAR。该函数最小参数个数为 3 个,最大参数个数为 9 个。
2023-12-01 09:52:29 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
2025-09-12 01:28:32 +00:00
#### FIND_IN_SET
2025-09-26 02:46:42 +00:00
```sql
2025-09-12 01:28:32 +00:00
FIND_IN_SET(expr1, expr2[, expr3])
```
2025-09-22 06:37:42 +00:00
**功能说明**:将 expr2 以 expr3 为分隔符切分为一个字符串列表,返回 expr1 在该列表中的序号,如存在多个,则返回第一个的序号, 不存在则返回 0。expr3 不可以是 NULL 或空串,如未提供该数,其默认值为 `,` 。
2025-09-12 01:28:32 +00:00
**返回结果类型**: BIGINT。如果参数 expr1 或 expr2 包含 NULL 值,则输出值为 NULL。
**适用数据类型**: VARCHAR、NCHAR。该函数最小参数个数为 2 个,最大参数个数为 3 个。
**嵌套子查询支持**:适用于内层查询和外层查询。
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
#### LENGTH
```sql
LENGTH(expr)
```
**功能说明**:以字节计数的长度。
**返回结果类型**: BIGINT。
2025-02-14 07:50:53 +00:00
**适用数据类型**: VARCHAR、NCHAR、VARBINARY。
2023-12-01 09:52:29 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
2025-09-12 01:28:32 +00:00
#### LIKE_IN_SET
2025-09-26 02:46:42 +00:00
```sql
2025-09-12 01:28:32 +00:00
LIKE_IN_SET(expr1, expr2[, expr3])
```
2025-09-22 06:37:42 +00:00
**功能说明**:将 expr2 以 expr3 为分隔符切分为一个字符串列表,将 expr1 使用 `LIKE` 运算符的语义与列表中的字符串进行匹配,返回第一个匹配项的序号,无匹配项则返回 0。expr3 不可以是 NULL 或空串,如未提供该数,其默认值为 `,` 。
2025-09-12 01:28:32 +00:00
**返回结果类型**: BIGINT。如果参数 expr1 或 expr2 包含 NULL 值,则输出值为 NULL。
**适用数据类型**: VARCHAR、NCHAR。该函数最小参数个数为 2 个,最大参数个数为 3 个。
**嵌套子查询支持**:适用于内层查询和外层查询。
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
#### LOWER
```sql
LOWER(expr)
```
**功能说明**:将字符串参数值转换为全小写字母。
**返回结果类型**:与输入字段的原始类型相同。
2025-02-14 07:50:53 +00:00
**适用数据类型**: VARCHAR、NCHAR。
2023-12-01 09:52:29 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
#### LTRIM
```sql
LTRIM(expr)
```
**功能说明**:返回清除左边空格后的字符串。
**返回结果类型**:与输入字段的原始类型相同。
2025-02-14 07:50:53 +00:00
**适用数据类型**: VARCHAR、NCHAR。
2023-12-01 09:52:29 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
#### POSITION
2023-12-01 09:52:29 +00:00
2024-09-11 00:05:54 +00:00
```sql
2025-03-10 06:14:20 +00:00
POSITION(expr1 IN expr2)
2024-09-11 00:05:54 +00:00
```
2025-03-10 06:14:20 +00:00
**功能说明**:计算字符串 `expr1` 在字符串 `expr2` 中的位置。
2024-09-11 00:05:54 +00:00
2025-03-05 02:47:03 +00:00
**版本**: v3.3.3.0
2024-12-17 10:08:29 +00:00
2025-03-10 06:14:20 +00:00
**返回结果类型**: BIGINT。
2023-12-01 09:52:29 +00:00
2024-09-11 00:05:54 +00:00
**适用数据类型**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- `expr1` : VARCHAR、NCHAR。
- `expr2` : VARCHAR、NCHAR。
2023-12-01 09:52:29 +00:00
2024-09-11 00:05:54 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2024-09-11 00:05:54 +00:00
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- 若 `expr1` 或 `expr2` 为 NULL, 返回 NULL。
- 若 `expr1` 在 `expr2` 中不存在,返回 0。
- 若 `expr1` 为空串,认为 `expr1` 在 `expr2` 中总能匹配成功,返回 1。
- 返回的位置是 1-base 的。
2024-09-11 00:05:54 +00:00
- 该函数是多字节安全的。
**举例**:
2025-08-14 04:24:16 +00:00
2023-12-01 09:52:29 +00:00
```sql
2025-03-10 06:14:20 +00:00
taos> select position('a' in 'cba');
position('a' in 'cba') |
=========================
3 |
2024-09-11 00:05:54 +00:00
2025-03-10 06:14:20 +00:00
taos> select position('' in 'cba');
position('' in 'cba') |
========================
1 |
2024-09-11 00:05:54 +00:00
2025-03-10 06:14:20 +00:00
taos> select position('d' in 'cba');
position('d' in 'cba') |
=========================
0 |
2023-12-01 09:52:29 +00:00
```
2025-09-12 01:28:32 +00:00
#### REGEXP_IN_SET
2025-09-26 02:46:42 +00:00
```sql
2025-09-12 01:28:32 +00:00
REGEXP_IN_SET(expr1, expr2[, expr3])
```
2025-09-22 06:37:42 +00:00
**功能说明**:将 expr2 以 expr3 为分隔符切分为一个字符串列表,将 expr1 作为正则表达式匹配列表中的字符串,返回第一个匹配项的序号,无匹配项则返回 0。expr3 不可以是 NULL 或空串,如未提供该数,其默认值为 `,` 。
2025-09-12 01:28:32 +00:00
**返回结果类型**: BIGINT。如果参数 expr1 或 expr2 包含 NULL 值,则输出值为 NULL。
**适用数据类型**: VARCHAR、NCHAR。该函数最小参数个数为 2 个,最大参数个数为 3 个。
**嵌套子查询支持**:适用于内层查询和外层查询。
**适用于**:表和超级表。
2025-03-10 06:14:20 +00:00
#### REPEAT
2024-09-11 00:05:54 +00:00
```sql
2025-03-10 06:14:20 +00:00
REPEAT(expr, count)
2024-09-11 00:05:54 +00:00
```
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
**功能说明**:返回将字符串重复指定次数得到的字符串。
**版本**: v3.3.3.0
2023-12-01 09:52:29 +00:00
2024-09-11 00:05:54 +00:00
**返回结果类型**:与输入字段 `expr` 的原始类型相同。
**适用数据类型**:
2025-08-14 04:24:16 +00:00
2025-02-14 07:50:53 +00:00
- `expr` : VARCHAR、NCHAR。
2025-03-10 06:14:20 +00:00
- `count` : INTEGER。
2024-09-11 00:05:54 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2024-09-11 00:05:54 +00:00
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- 若 `count < 1` ,返回空串。
- 若 `expr` 或 `count` 为 NULL, 返回 NULL。
2024-09-11 00:05:54 +00:00
**举例**:
2025-08-14 04:24:16 +00:00
2024-09-11 00:05:54 +00:00
```sql
2025-03-10 06:14:20 +00:00
taos> select repeat('abc',5);
repeat('abc',5) |
============================
abcabcabcabcabc |
taos> select repeat('abc',-1);
repeat('abc',-1) |
===================
|
2024-09-11 00:05:54 +00:00
```
2025-03-10 06:14:20 +00:00
#### REPLACE
2024-09-11 00:05:54 +00:00
```sql
2025-03-10 06:14:20 +00:00
REPLACE(expr, from_str, to_str)
2024-09-11 00:05:54 +00:00
```
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
**功能说明**:将字符串中的 `from_str` 全部替换为 `to_str` 。
2024-09-11 00:05:54 +00:00
2025-03-05 02:47:03 +00:00
**版本**: v3.3.3.0
2024-12-17 10:08:29 +00:00
2024-09-11 00:05:54 +00:00
**返回结果类型**:与输入字段 `expr` 的原始类型相同。
**适用数据类型**:
2025-08-14 04:24:16 +00:00
2025-03-05 02:47:03 +00:00
- `expr` : VARCHAR、NCHAR。
2025-03-10 06:14:20 +00:00
- `from_str` : VARCHAR、NCHAR。
- `to_str` : VARCHAR、NCHAR。
2023-12-01 09:52:29 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
2024-09-11 00:05:54 +00:00
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- 该函数是大小写敏感的。
2024-09-11 00:05:54 +00:00
- 任意参数为 NULL, 返回 NULL。
- 该函数是多字节安全的。
**举例**:
2025-08-14 04:24:16 +00:00
2024-09-11 00:05:54 +00:00
```sql
2025-03-10 06:14:20 +00:00
taos> select replace('aabbccAABBCC', 'AA', 'DD');
replace('aabbccAABBCC', 'AA', 'DD') |
======================================
aabbccDDBBCC |
2024-09-11 00:05:54 +00:00
```
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
#### RTRIM
2023-12-01 09:52:29 +00:00
```sql
2025-03-10 06:14:20 +00:00
RTRIM(expr)
2023-12-01 09:52:29 +00:00
```
2025-03-10 06:14:20 +00:00
**功能说明**:返回清除右边空格后的字符串。
2023-12-01 09:52:29 +00:00
**返回结果类型**:与输入字段的原始类型相同。
2025-02-14 07:50:53 +00:00
**适用数据类型**: VARCHAR、NCHAR。
2023-12-01 09:52:29 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
#### SUBSTRING/SUBSTR
2024-09-11 00:05:54 +00:00
```sql
2025-03-10 06:14:20 +00:00
SUBSTRING/SUBSTR(expr, pos [, len])
SUBSTRING/SUBSTR(expr FROM pos [FOR len])
2024-09-11 00:05:54 +00:00
```
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
**功能说明**:返回字符串 `expr` 在 `pos` 位置开始的子串,若指定了 `len` ,则返回在 `pos` 位置开始,长度为 `len` 的子串。
2024-12-17 10:08:29 +00:00
2024-09-11 00:05:54 +00:00
**返回结果类型**:与输入字段 `expr` 的原始类型相同。
**适用数据类型**:
2025-08-14 04:24:16 +00:00
2025-02-14 07:50:53 +00:00
- `expr` : VARCHAR、NCHAR。
2025-03-10 06:14:20 +00:00
- `pos` :整数类型。
- `len` :整数类型。
2024-09-11 00:05:54 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2024-09-11 00:05:54 +00:00
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- 若 `pos` 为正数,则返回的结果为 `expr` 从左到右开始数 `pos` 位置开始的右侧的子串。
- 若 `pos` 为负数,则返回的结果为 `expr` 从右到左开始数 `pos` 位置开始的右侧的子串。
2024-09-11 00:05:54 +00:00
- 任意参数为 NULL, 返回 NULL。
- 该函数是多字节安全的。
2025-03-10 06:14:20 +00:00
- 若 `len` 小于 1, 返回空串。
- `pos` 是 1-base 的,若 `pos` 为 0, 返回空串。
- 若 `pos` + `len` 大于 `len(expr)` ,返回从 `pos` 开始到字符串结尾的子串,等同于执行 `substring(expr, pos)` 。
- `SUBSTRING` 函数等价于 `SUBSTR` ,从 v3.3.3.0 开始支持。
- `SUBSTRING/SUBSTR(expr FROM pos [FOR len])` 语法从 v3.3.3.0 开始支持。
2024-09-11 00:05:54 +00:00
**举例**:
2025-08-14 04:24:16 +00:00
2024-09-11 00:05:54 +00:00
```sql
2025-03-10 06:14:20 +00:00
taos> select substring('tdengine', 0);
substring('tdengine', 0) |
===========================
|
2024-09-11 00:05:54 +00:00
2025-03-10 06:14:20 +00:00
taos> select substring('tdengine', 3);
substring('tdengine', 3) |
===========================
engine |
2024-09-11 00:05:54 +00:00
2025-03-10 06:14:20 +00:00
taos> select substring('tdengine', 3,3);
substring('tdengine', 3,3) |
=============================
eng |
2024-09-11 00:05:54 +00:00
2025-03-10 06:14:20 +00:00
taos> select substring('tdengine', -3,3);
substring('tdengine', -3,3) |
==============================
ine |
2024-09-11 00:05:54 +00:00
2025-03-10 06:14:20 +00:00
taos> select substring('tdengine', -3,-3);
substring('tdengine', -3,-3) |
===============================
|
2024-09-11 00:05:54 +00:00
```
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
#### SUBSTRING_INDEX
2023-12-01 09:52:29 +00:00
```sql
2025-03-10 06:14:20 +00:00
SUBSTRING_INDEX(expr, delim, count)
2023-12-01 09:52:29 +00:00
```
2025-03-10 06:14:20 +00:00
**功能说明**:返回字符串 `expr` 在出现指定次数分隔符的位置截取的子串。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**版本**: v3.3.3.0
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**返回结果类型**:与输入字段 `expr` 的原始类型相同。
**适用数据类型**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- `expr` : VARCHAR、NCHAR。
- `delim` : VARCHAR、NCHAR。
- `count` : INTEGER。
2023-12-01 09:52:29 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- 若 `count` 为正数,则返回的结果为 `expr` 从左到右开始数第 `count` 次 出现 `delim` 的位置左侧的字符串。
- 若 `count` 为负数,则返回的结果为 `expr` 从右到左开始数第 `count` 的绝对值次 出现 `delim` 的位置右侧的字符串。
- 任意参数为 NULL, 返回 NULL。
- 该函数是多字节安全的。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**举例**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
```sql
taos> select substring_index('www.taosdata.com','.',2);
substring_index('www.taosdata.com','.',2) |
============================================
www.taosdata |
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
taos> select substring_index('www.taosdata.com','.',-2);
substring_index('www.taosdata.com','.',-2) |
=============================================
taosdata.com |
```
#### TRIM
2023-12-01 09:52:29 +00:00
```sql
2025-03-10 06:14:20 +00:00
TRIM([{LEADING | TRAILING | BOTH} [remstr] FROM] expr)
TRIM([remstr FROM] expr)
2023-12-01 09:52:29 +00:00
```
2025-03-10 06:14:20 +00:00
**功能说明**:返回去掉了所有 remstr 前缀或后缀的字符串 epxr。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**版本**: v3.3.3.0
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**返回结果类型**:与输入字段 epxr 的原始类型相同。
**适用数据类型**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- remstr: VARCHAR、NCHAR。
- epxr: VARCHAR、NCHAR。
2023-12-01 09:52:29 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- 第一个可选变量[LEADING | BOTH | TRAILING]指定要剪裁字符串的哪一侧:
- LEADING 将移除字符串开头的指定字符。
- TRAILING 将移除字符串末尾的指定字符。
- BOTH( 默认值) 将移除字符串开头和末尾的指定字符。
- 第二个可选变量[remstr]指定要裁剪掉的字符串:
- 如果不指定 remstr, 默认裁剪空格。
2025-04-01 12:34:47 +00:00
- remstr 可以指定多个字符,如 trim('ab' from 'abacd'),此时会将 'ab' 看做一个整体来裁剪,得到裁剪结果 'acd'。
2025-03-10 06:14:20 +00:00
- 若 expr 为 NULL, 返回 NULL。
- 该函数是多字节安全的。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**举例**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
```sql
taos> select trim(' a ');
trim(' a ') |
=============================
a |
taos> select trim(leading from ' a ');
trim(leading from ' a ') |
==========================================
a |
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
taos> select trim(leading 'b' from 'bbbbbbbba ');
trim(leading 'b' from 'bbbbbbbba ') |
==============================================
a |
taos> select trim(both 'b' from 'bbbbbabbbbbb');
trim(both 'b' from 'bbbbbabbbbbb') |
=====================================
a |
```
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
#### UPPER
2023-12-01 09:52:29 +00:00
```sql
2025-03-10 06:14:20 +00:00
UPPER(expr)
2023-12-01 09:52:29 +00:00
```
2025-03-10 06:14:20 +00:00
**功能说明**:将字符串参数值转换为全大写字母。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**返回结果类型**:与输入字段的原始类型相同。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**适用数据类型**: VARCHAR、NCHAR。
2023-12-01 09:52:29 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
### 编码函数
2025-04-15 22:37:56 +00:00
#### TO_BASE64
2025-03-30 21:54:43 +00:00
```sql
2025-04-15 22:37:56 +00:00
TO_BASE64(expr)
2025-03-30 21:54:43 +00:00
```
**功能说明**: 传回字符串“expr”的 Base64 编码。
2025-04-10 11:53:52 +00:00
**返回结果类型**: VARCHAR
2025-03-30 21:54:43 +00:00
**适用数据类型**:
- `expr` : VARCHAR, NCHAR.
**嵌套子查询支持**:适用于内层查询和外层查询。
**适用于**:表和超级表。
**使用说明**:
- 若 expr 为 NULL, 返回 NULL。
**举例**:
```sql
2025-04-15 22:37:56 +00:00
taos> select to_base64("");
to_base64("") |
================
|
taos> select to_base64("Hello, world!");
to_base64("Hello, world!") |
=============================
SGVsbG8sIHdvcmxkIQ== |
taos> select to_base64("你好 世界");
to_base64("你好 世界") |
==============================
5L2g5aW9IOS4lueVjA== |
2025-03-30 21:54:43 +00:00
```
2025-08-21 05:42:57 +00:00
### 类型转换函数
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
转换函数将值从一种数据类型转换为另一种数据类型。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
#### CAST
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
```sql
CAST(expr AS type_name)
2023-12-01 09:52:29 +00:00
```
2025-03-10 06:14:20 +00:00
**功能说明**:数据类型转换函数,返回 expr 转换为 type_name 指定的类型后的结果。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**返回结果类型**: CAST 中指定的类型( type_name)。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**适用数据类型**:输入参数 expr 的类型可以是除 JSON 和 VARBINARY 外的所有类型。如果 type_name 为 VARBINARY, 则 expr 只能是 VARCHAR 类型。
2023-12-01 09:52:29 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
**适用于**:表和超级表。
**使用说明**:
2025-03-10 06:14:20 +00:00
- 对于不能支持的类型转换会直接报错。
- 对于类型支持但某些值无法正确转换的情况,对应的转换后的值以转换函数输出为准。目前可能遇到的几种情况:
- 字符串类型转换数值类型时可能出现的无效字符情况,例如 "a" 可能转为 0, 但不会报错。
- 转换到数值类型时,数值大于 type_name 可表示的范围时,则会溢出,但不会报错。
- 转换到字符串类型时,如果转换后长度超过 type_name 中指定的长度,则会截断,但不会报错。
2025-03-27 12:50:20 +00:00
- DECIMAL 类型不支持与 JSON、VARBINARY、GEOMETRY 类型的互转。
2023-12-01 09:52:29 +00:00
#### TO_CHAR
```sql
TO_CHAR(ts, format_str_literal)
```
2025-03-05 10:10:31 +00:00
**功能说明**:将 timestamp 类型按照指定格式转换为字符串。
2023-12-01 09:52:29 +00:00
2025-03-05 10:10:31 +00:00
**使用说明**: vv3.2.2.0
2024-01-30 00:41:42 +00:00
2025-02-14 07:50:53 +00:00
**返回结果数据类型**: VARCHAR。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**适用数据类型**: TIMESTAMP。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**支持的格式**:
2023-12-01 09:52:29 +00:00
2024-04-26 06:30:34 +00:00
| **格式** | **说明** | **例子** |
| ------------------- | ----------------------------------------- | ------------------------- |
| AM,am,PM,pm | 无点分隔的上午下午 | 07:00:00am |
| A.M.,a.m.,P.M.,p.m. | 有点分隔的上午下午 | 07:00:00a.m. |
2025-03-05 02:47:03 +00:00
| YYYY,yyyy | 年, 4 个及以上数字 | 2023-10-10 |
| YYY,yyy | 年,最后 3 位数字 | 023-10-10 |
| YY,yy | 年,最后 2 位数字 | 23-10-10 |
2025-02-14 07:50:53 +00:00
| Y,y | 年,最后一位数字 | 3-10-10 |
| MONTH | 月,全大写 | 2023-JANUARY-01 |
| Month | 月,首字母大写 | 2023-January-01 |
| month | 月,全小写 | 2023-january-01 |
2025-04-01 12:34:47 +00:00
| MON | 月,缩写,全大写 (三个字符) | JAN、SEP |
2025-03-05 02:47:03 +00:00
| Mon | 月,缩写,首字母大写 | Jan、Sep |
| mon | 月,缩写,全小写 | jan、sep |
2025-02-14 07:50:53 +00:00
| MM,mm | 月,数字 01-12 | 2023-01-01 |
| DD,dd | 月日, 01-31 | |
| DAY | 周日,全大写 | MONDAY |
| Day | 周日,首字符大写 | Monday |
| day | 周日,全小写 | monday |
| DY | 周日,缩写,全大写 | MON |
| Dy | 周日,缩写,首字符大写 | Mon |
| dy | 周日,缩写,全小写 | mon |
| DDD | 年日, 001-366 | |
| D,d | 周日, 数字, 1-7, Sunday(1) to Saturday(7) | |
| HH24,hh24 | 小时, 00-23 | 2023-01-30 23:59:59 |
2025-03-05 10:10:31 +00:00
| hh12,HH12,hh,HH | 小时, 01-12 | 2023-01-30 12:59:59PM |
2025-02-14 07:50:53 +00:00
| MI,mi | 分钟, 00-59 | |
| SS,ss | 秒, 00-59 | |
| MS,ms | 毫秒, 000-999 | |
| US,us | 微秒, 000000-999999 | |
| NS,ns | 纳秒, 000000000-999999999 | |
2024-04-26 06:30:34 +00:00
| TZH,tzh | 时区小时 | 2023-01-30 11:59:59PM +08 |
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-03-05 02:47:03 +00:00
- `Month` 、`Day`等的输出格式是左对齐的,右侧添加空格,如 `2023-OCTOBER -01` 、`2023-SEPTEMBER-01`, 9 月是月份中英文字母数最长的,因此 9 月没有空格。星期类似。
- 使用`ms`、`us`、`ns`时,以上三种格式的输出只在精度上不同,比如 ts 为 `1697182085123` , `ms` 的输出为 `123` , `us` 的输出为 `123000` , `ns` 的输出为 `123000000` 。
2025-03-27 12:50:20 +00:00
- 时间格式中无法匹配规则的内容会直接输出。如果想要在格式串中指定某些能够匹配规则的部分不做转换,可以使用双引号,如 `to_char(ts, 'yyyy-mm-dd "is formatted by yyyy-mm-dd"')` 。如果想要输出双引号,那么在双引号之前加一个反斜杠,如 `to_char(ts, '\"yyyy-mm-dd\"')` 将会输出 `"2023-10-10"` 。
2025-03-05 02:47:03 +00:00
- 那些输出是数字的格式,如`YYYY`、`DD`,大写与小写意义相同,即 `yyyy` 和 `YYYY` 可以互换。
2025-02-14 07:50:53 +00:00
- 推荐在时间格式中带时区信息,如果不带则默认输出的时区为服务端或客户端所配置的时区。
- 输入时间戳的精度由所查询表的精度确定,若未指定表,则精度为毫秒。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
#### TO_ISO8601
```sql
TO_ISO8601(expr [, timezone])
```
**功能说明**:将时间戳转换成为 ISO8601 标准的日期时间格式, 并附加时区信息。timezone 参数允许用户为输出结果指定附带任意时区信息。如果 timezone 参数省略,输出结果则附带当前客户端的系统时区信息。
**返回结果数据类型**: VARCHAR 类型。
**适用数据类型**: INTEGER、TIMESTAMP。
**嵌套子查询支持**:适用于内层查询和外层查询。
**适用于**:表和超级表。
**使用说明**:
- timezone 参数允许输入的时区格式为:[z/Z, +/-hhmm, +/-hh, +/-hh:mm]。例如, TO_ISO8601(1, "+00:00")。
2025-04-01 12:34:47 +00:00
- 输入时间戳的精度由所查询表的精度确定,若未指定表,则精度为毫秒。
2025-03-10 06:14:20 +00:00
#### TO_JSON
```sql
TO_JSON(str_literal)
```
**功能说明**:将字符串常量转换为 JSON 类型。
**返回结果数据类型**: JSON。
**适用数据类型**: JSON 字符串,形如 '\{ "literal" : literal }'。'\{}'表示空值。键必须为字符串字面量, 值可以为数值字面量、字符串字面量、布尔字面量或空值字面量。str_literal 中不支持转义符。
**嵌套子查询支持**:适用于内层查询和外层查询。
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
#### TO_TIMESTAMP
```sql
TO_TIMESTAMP(ts_str_literal, format_str_literal)
```
2025-02-14 07:50:53 +00:00
**功能说明**:将字符串按照指定格式转化为时间戳。
2023-12-01 09:52:29 +00:00
2025-03-05 11:45:35 +00:00
**使用说明**: v3.2.2.0
2024-01-30 00:41:42 +00:00
2025-02-14 07:50:53 +00:00
**返回结果数据类型**: TIMESTAMP。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**适用数据类型**: VARCHAR。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**使用说明**:与 `to_char` 相同。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-02-14 07:50:53 +00:00
- 若 `ms` 、`us`、`ns` 同时指定,那么结果时间戳包含上述三个字段的和,如 `to_timestamp('2023-10-10 10:10:10.123.000456.000000789', 'yyyy-mm-dd hh:mi:ss.ms.us.ns')` 输出为 `2023-10-10 10:10:10.123456789` 对应的时间戳。
- `MONTH` 、`MON`、`DAY`、`DY` 以及其他输出为数字的格式的大小写意义相同,如 `to_timestamp('2023-JANUARY-01', 'YYYY-month-dd')` , `month`可以被替换为 `MONTH` 或者 `Month` 。
2025-03-05 10:10:31 +00:00
- 如果同一字段被指定了多次,那么前面的指定将会被覆盖,如 `to_timestamp('2023-22-10-10', 'yyyy-yy-MM-dd')` ,输出年份是 `2022` 。
2025-02-14 07:50:53 +00:00
- 为避免转换时使用了非预期的时区,推荐在时间中携带时区信息,例如 '2023-10-10 10:10:10+08',如果未指定时区则默认时区为服务端或客户端指定的时区。
- 如果没有指定完整的时间,那么默认时间值为指定或默认时区的 `1970-01-01 00:00:00` ,未指定部分使用该默认值中的对应部分。暂不支持只指定年日而不指定月日的格式,如 'yyyy-mm-DDD',支持'yyyy-mm-DD'。
- 如果格式串中有`AM`、`PM`等,那么小时必须是 12 小时制,范围必须是 01-12。
2025-04-01 12:34:47 +00:00
- `to_timestamp` 转换具有一定的容错机制,在格式串和时间戳串不完全对应时,有时也可转换,如 `to_timestamp('200101/2', 'yyyyMM1/dd')` ,格式串中多出来的 1 会被丢弃。格式串与时间戳串中多余的空格字符 (空格、tab 等) 也会被自动忽略,如 `to_timestamp(' 23 年 - 1 月 - 01 日 ', 'yy 年-MM月-dd日')` 可以被成功转换。虽然 `MM` 等字段需要两个数字对应 (只有一位时前面补 0), 在 `to_timestamp` 时,一个数字也可以成功转换。
2025-02-14 07:50:53 +00:00
- 输出时间戳的精度与查询表的精度相同,若查询未指定表,则输出精度为毫秒,如 `select to_timestamp('2023-08-1 10:10:10.123456789', 'yyyy-mm-dd hh:mi:ss.ns')` 的输出将会把微秒和纳秒进行截断、如果指定一张纳秒表,那么就不会发生截断,如 `select to_timestamp('2023-08-1 10:10:10.123456789', 'yyyy-mm-dd hh:mi:ss.ns') from db_ns.table_ns limit 1` 。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
#### TO_UNIXTIMESTAMP
```sql
TO_UNIXTIMESTAMP(expr [, return_timestamp])
return_timestamp: {
0
| 1
}
```
**功能说明**:将日期时间格式的字符串转换成为时间戳。
**返回结果数据类型**: BIGINT、TIMESTAMP。
**应用字段**: VARCHAR、NCHAR。
**嵌套子查询支持**:适用于内层查询和外层查询。
**适用于**:表和超级表。
**使用说明**:
- 输入的日期时间字符串须符合 ISO8601/RFC3339 标准,无法转换的字符串格式将返回 NULL。
- 返回的时间戳精度与当前 DATABASE 设置的时间精度一致。
- return_timestamp 指定函数返回值是否为时间戳类型,设置为 1 时返回 TIMESTAMP 类型,设置为 0 时返回 BIGINT 类型。如不指定缺省返回 BIGINT 类型。
2023-12-01 09:52:29 +00:00
### 时间和日期函数
时间和日期函数对时间戳类型进行操作。
2025-02-14 07:50:53 +00:00
所有返回当前时间的函数,如 NOW、TODAY 和 TIMEZONE, 在一条 SQL 语句中不论出现多少次都只会被计算一次。
2023-12-01 09:52:29 +00:00
2025-08-21 11:43:12 +00:00
#### DATE
```sql
DATE(expr)
```
**功能说明**:返回输入时间表达式的日期。
**版本**: v3.3.8.0
**返回结果类型**: VARCHAR。
**适用数据类型**:表示时间戳的 BIGINT、TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。
**嵌套子查询支持**:适用于内层查询和外层查询。
**适用于**:表和超级表。
**使用说明**:
2025-08-22 03:05:58 +00:00
- 返回日期的格式为 `yyyy-mm-dd` 。
2025-08-21 11:43:12 +00:00
- 若 `expr` 为 NULL, 返回 NULL。
- 若 `expr` 为VARCHAR、NCHAR 类型但不符合 ISO8601/RFC3339 标准, 返回NULL。
- 输入时间表达式的精度由所查询表的精度确定,未指定表,则精度为毫秒。
- 输入与返回值的时区与客户端的系统时区一致,为避免转换时使用了非预期的时区,推荐在输入时间表达式中携带时区信息。
**举例**:
(注意: 例中语句在UTC+0800时区执行, 精度为毫秒)
2025-09-26 02:46:42 +00:00
2025-08-21 11:43:12 +00:00
```sql
taos> select date(946656000000);
date(946656000000) |
=================================
2000-01-01 |
2025-08-22 03:05:58 +00:00
taos> select date('2000-01-01 12:00:00.000');
date('2000-01-01 12:00:00.000') |
==================================
2000-01-01 |
2025-08-21 11:43:12 +00:00
```
2025-03-10 06:14:20 +00:00
#### DAYOFWEEK
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
```sql
DAYOFWEEK(expr)
```
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
**功能说明**:返回输入日期是周几。
**版本**: v3.3.3.0
**返回结果类型**: BIGINT。
**适用数据类型**:表示时间戳的 BIGINT、TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。
**嵌套子查询支持**:适用于内层查询和外层查询。
**适用于**:表和超级表。
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- 返回值 1 代表周日, 2 代表周一 ... 7 代表周六
- 若 `expr` 为 NULL, 返回 NULL。
- 输入时间戳的精度由所查询表的精度确定,若未指定表,则精度为毫秒。
**举例**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
```sql
taos> select dayofweek('2000-01-01');
dayofweek('2000-01-01') |
==========================
7 |
```
2023-12-01 09:52:29 +00:00
#### NOW
```sql
NOW()
```
**功能说明**:返回客户端当前系统时间。
**返回结果数据类型**: TIMESTAMP。
**应用字段**:在 WHERE 或 INSERT 语句中使用时只能作用于 TIMESTAMP 类型的字段。
**适用于**:表和超级表。
**嵌套子查询支持**:适用于内层查询和外层查询。
**使用说明**:
2025-02-14 07:50:53 +00:00
- 支持时间加减操作,如 NOW() + 1s, 支持的时间单位如下:
2023-12-01 09:52:29 +00:00
b(纳秒)、u(微秒)、a(毫秒)、s(秒)、m(分)、h(小时)、d(天)、w(周)。
- 返回的时间戳精度与当前 DATABASE 设置的时间精度一致。
#### TIMEDIFF
```sql
TIMEDIFF(expr1, expr2 [, time_unit])
```
2025-07-12 07:36:28 +00:00
**功能说明**:返回时间戳 `expr1` - `expr2` 的结果,结果可能为负,并近似到 `time_unit` 指定的时间单位。
2023-12-01 09:52:29 +00:00
2024-09-11 00:05:54 +00:00
**返回结果类型**: BIGINT。
2023-12-01 09:52:29 +00:00
2024-09-11 00:05:54 +00:00
**适用数据类型**:
2025-08-14 04:24:16 +00:00
2025-03-05 02:47:03 +00:00
- `expr1` :表示时间戳的 BIGINT、TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。
2025-02-14 07:50:53 +00:00
- `expr2` :表示时间戳的 BIGINT、TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。
2024-09-11 00:05:54 +00:00
- `time_unit` :见使用说明。
2025-03-05 02:47:03 +00:00
- v3.3.3.0 之前该函数结果为时间戳 `expr1` 和 `expr2` 的差值的绝对值,结果为正数。
2023-12-01 09:52:29 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2024-09-11 00:05:54 +00:00
2023-12-01 09:52:29 +00:00
**使用说明**:
2025-08-14 04:24:16 +00:00
2024-09-11 00:05:54 +00:00
- `expr1` 或 `expr2` 为 NULL, 返回 NULL。
2025-07-12 07:36:28 +00:00
- 输入包含不符合时间日期格式的字符串则返回 NULL。
2025-02-14 07:50:53 +00:00
- 输入时间戳的精度由所查询表的精度确定,若未指定表,则精度为毫秒。
2025-07-12 07:36:28 +00:00
- 返回值的时间单位由 `time_unit` 参数指定,最小是数据库的时间分辨率。`time_unit` 参数未指定时,以数据库的时间分辨率为时间单位。支持的时间单位 `time_unit` 如下: 1b(纳秒)、1u(微秒)、1a(毫秒)、1s(秒)、1m(分)、1h(小时)、1d(天)、1w(周)。
- `time_unit` 为 NULL, 等同于未指定时间单位。
2023-12-01 09:52:29 +00:00
2024-09-11 00:05:54 +00:00
**举例**:
2025-08-14 04:24:16 +00:00
2024-09-11 00:05:54 +00:00
```sql
taos> select timediff('2022-01-01 08:00:00', '2022-01-01 08:00:01',1s);
timediff('2022-01-01 08:00:00', '2022-01-01 08:00:01',1s) |
============================================================
-1 |
taos> select timediff('2022-01-01 08:00:01', '2022-01-01 08:00:00',1s);
timediff('2022-01-01 08:00:01', '2022-01-01 08:00:00',1s) |
============================================================
1 |
2025-07-12 07:36:28 +00:00
taos> select timediff(now, now-1w, 1w);
timediff(now, now-1w, 1d) |
============================
7 |
2024-09-11 00:05:54 +00:00
```
2023-12-01 09:52:29 +00:00
#### TIMETRUNCATE
```sql
TIMETRUNCATE(expr, time_unit [, use_current_timezone])
use_current_timezone: {
0
| 1
}
```
**功能说明**:将时间戳按照指定时间单位 time_unit 进行截断。
**返回结果数据类型**: TIMESTAMP。
2025-02-14 07:50:53 +00:00
**应用字段**:表示时间戳的 BIGINT、TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。
2023-12-01 09:52:29 +00:00
**适用于**:表和超级表。
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-02-14 07:50:53 +00:00
- 支持的时间单位 time_unit 包括 1b(纳秒)、1u(微秒)、1a(毫秒)、1s(秒)、1m(分)、, 1h(小时)、1d(天)、1w(周)。
2023-12-01 09:52:29 +00:00
- 返回的时间戳精度与当前 DATABASE 设置的时间精度一致。
2025-02-14 07:50:53 +00:00
- 输入时间戳的精度由所查询表的精度确定,若未指定表,则精度为毫秒。
2023-12-01 09:52:29 +00:00
- 输入包含不符合时间日期格式的字符串则返回 NULL。
2025-02-14 07:50:53 +00:00
- 当使用 1d/1w 作为时间单位对时间戳进行截断时,可通过设置 use_current_timezone 参数指定是否根据当前时区进行截断处理。
2023-12-01 09:52:29 +00:00
值 0 表示使用 UTC 时区进行截断,值 1 表示使用当前时区进行截断。
2025-02-14 07:50:53 +00:00
例如客户端所配置时区为 UTC+0800, 则 TIMETRUNCATE('2020-01-01 23:00:00', 1d, 0) 返回结果为东八区时间 '2020-01-01 08:00:00'。
2023-12-01 09:52:29 +00:00
而使用 TIMETRUNCATE('2020-01-01 23:00:00', 1d, 1) 时,返回结果为东八区时间 '2020-01-01 00:00:00'。
2025-03-05 02:47:03 +00:00
当不指定 use_current_timezone 时, use_current_timezone 默认值为 1。
2025-04-01 12:34:47 +00:00
- 当将时间值截断到一周( 1w) 时, timetruncate 的计算是基于 Unix 时间戳( 1970 年 1 月 1 日 00:00:00 UTC) 进行的。Unix 时间戳始于星期四,
2024-08-23 08:39:18 +00:00
因此所有截断后的日期都是星期四。
2023-12-01 09:52:29 +00:00
#### TIMEZONE
```sql
TIMEZONE()
```
**功能说明**:返回客户端当前时区信息。
**返回结果数据类型**: VARCHAR。
2025-02-14 07:50:53 +00:00
**应用字段**:无。
2023-12-01 09:52:29 +00:00
**适用于**:表和超级表。
#### TODAY
```sql
TODAY()
```
**功能说明**:返回客户端当日零时的系统时间。
**返回结果数据类型**: TIMESTAMP。
**应用字段**:在 WHERE 或 INSERT 语句中使用时只能作用于 TIMESTAMP 类型的字段。
**适用于**:表和超级表。
**使用说明**:
2025-02-14 07:50:53 +00:00
- 支持时间加减操作,如 TODAY() + 1s, 支持的时间单位如下:
b(纳秒)、u(微秒)、a(毫秒)、s(秒)、m(分)、h(小时)、d(天)、w(周)。
2023-12-01 09:52:29 +00:00
- 返回的时间戳精度与当前 DATABASE 设置的时间精度一致。
2024-09-11 00:05:54 +00:00
#### WEEK
2025-03-10 06:14:20 +00:00
2024-09-11 00:05:54 +00:00
```sql
WEEK(expr [, mode])
```
2025-08-14 04:24:16 +00:00
2024-09-11 00:05:54 +00:00
**功能说明**:返回输入日期的周数。
2025-03-05 02:47:03 +00:00
**版本**: v3.3.3.0
2024-12-17 10:08:29 +00:00
2024-09-11 00:05:54 +00:00
**返回结果类型**: BIGINT。
**适用数据类型**:
2025-08-14 04:24:16 +00:00
2025-02-14 07:50:53 +00:00
- `expr` :表示时间戳的 BIGINT、TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。
2024-09-11 00:05:54 +00:00
- `mode` : 0 - 7 之间的整数。
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2024-09-11 00:05:54 +00:00
**使用说明**:
2025-08-14 04:24:16 +00:00
2024-09-11 00:05:54 +00:00
- 若 `expr` 为 NULL, 返回 NULL。
2025-04-01 12:34:47 +00:00
- 输入时间戳的精度由所查询表的精度确定,若未指定表,则精度为毫秒。
2024-09-11 00:05:54 +00:00
- `mode` 用来指定一周是从周日开始还是周一开始,以及指定返回值范围是 1 - 53 还是 0 - 53。下表详细描述不同的 mode 对应的计算方法:
| Mode | 每周的第一天 | 返回值范围 | 第 1 周的计算方法 |
| ---- | ------ | ------ | ------------------ |
| 0 | 周日 | 0 - 53 | 第一个包含周日的周为第 1 周 |
| 1 | 周一 | 0 - 53 | 第一个包含四天及以上的周为第 1 周 |
| 2 | 周日 | 1 - 53 | 第一个包含周日的周为第 1 周 |
| 3 | 周一 | 1 - 53 | 第一个包含四天及以上的周为第 1 周 |
| 4 | 周日 | 0 - 53 | 第一个包含四天及以上的周为第 1 周 |
| 5 | 周一 | 0 - 53 | 第一个包含周一的周为第 1 周 |
| 6 | 周日 | 1 - 53 | 第一个包含四天及以上的周为第 1 周 |
| 7 | 周一 | 1 - 53 | 第一个包含周一的周为第 1 周 |
2025-08-14 04:24:16 +00:00
2025-03-05 02:47:03 +00:00
- 当返回值范围为 0 - 53 时,第 1 周之前的日期为第 0 周。
- 当返回值范围为 1 - 53 时,第 1 周之前的日期为上一年的最后一周。
2024-09-11 00:05:54 +00:00
- 以`2000-01-01`为例,
2025-08-14 04:24:16 +00:00
- 在 `mode=0` 时返回值为 `0` ,因为该年第一个周日为 `2000-01-02` ,从 `2000-01-02` 起才是第 1 周,所以 `2000-01-01` 为第 0 周,返回 0。
- 在 `mode=1` 时返回值为 `0` ,因为 `2000-01-01` 所在的周只有两天,分别是 `2000-01-01(周六)` 和 `2000-01-02(周日)` ,所以 `2000-01-03` 起才是第一周,`2000-01-01`为第 0 周,返回 0。
- 在 `mode=2` 时返回值为 `52` ,因为从 `2000-01-02` 起才是第 1 周,并且返回值范围为 1-53, 所以 `2000-01-01` 算做上一年的最后一周,即 1999 年的第 52 周,返回 52。
2024-09-11 00:05:54 +00:00
**举例**:
2025-08-14 04:24:16 +00:00
2024-09-11 00:05:54 +00:00
```sql
taos> select week('2000-01-01',0);
week('2000-01-01',0) |
========================
0 |
taos> select week('2000-01-01',1);
week('2000-01-01',1) |
========================
0 |
taos> select week('2000-01-01',2);
week('2000-01-01',2) |
========================
52 |
taos> select week('2000-01-01',3);
week('2000-01-01',3) |
========================
52 |
```
#### WEEKDAY
2025-08-14 04:24:16 +00:00
2024-09-11 00:05:54 +00:00
```sql
WEEKDAY(expr)
```
2025-08-14 04:24:16 +00:00
2024-09-11 00:05:54 +00:00
**功能说明**:返回输入日期是周几。
2025-03-05 02:47:03 +00:00
**版本**: v3.3.3.0
2024-12-17 10:08:29 +00:00
2024-09-11 00:05:54 +00:00
**返回结果类型**: BIGINT。
2025-03-05 02:47:03 +00:00
**适用数据类型**:表示时间戳的 BIGINT、TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。
2024-09-11 00:05:54 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2024-09-11 00:05:54 +00:00
**使用说明**:
2025-08-14 04:24:16 +00:00
2024-10-11 01:07:12 +00:00
- 返回值 0 代表周一, 1 代表周二 ... 6 代表周日。
2024-09-11 00:05:54 +00:00
- 若 `expr` 为 NULL, 返回 NULL。
2025-02-14 07:50:53 +00:00
- 输入时间戳的精度由所查询表的精度确定,若未指定表,则精度为毫秒。
2024-09-11 00:05:54 +00:00
**举例**:
2025-08-14 04:24:16 +00:00
2024-09-11 00:05:54 +00:00
```sql
taos> select weekday('2000-01-01');
weekday('2000-01-01') |
========================
5 |
```
2025-03-10 06:14:20 +00:00
#### WEEKOFYEAR
2024-09-11 00:05:54 +00:00
```sql
2025-03-10 06:14:20 +00:00
WEEKOFYEAR(expr)
2024-09-11 00:05:54 +00:00
```
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
**功能说明**:返回输入日期的周数。
2024-09-11 00:05:54 +00:00
2025-03-05 02:47:03 +00:00
**版本**: v3.3.3.0
2024-12-17 10:08:29 +00:00
2024-09-11 00:05:54 +00:00
**返回结果类型**: BIGINT。
2025-02-14 07:50:53 +00:00
**适用数据类型**:表示时间戳的 BIGINT、TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。
2024-09-11 00:05:54 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2024-09-11 00:05:54 +00:00
**使用说明**:
2025-08-14 04:24:16 +00:00
2025-03-10 06:14:20 +00:00
- 等同于`WEEK(expr, 3)`,即在每周第一天是周一,返回值范围为 1 - 53, 第一个包含四天及以上的周为第 1 周的条件下判断输入日期的周数。
2024-09-11 00:05:54 +00:00
- 若 `expr` 为 NULL, 返回 NULL。
2025-03-10 06:14:20 +00:00
- 输入时间戳的精度由所查询表的精度确定,未指定表,则精度为毫秒。
2024-09-11 00:05:54 +00:00
**举例**:
2025-08-14 04:24:16 +00:00
2024-09-11 00:05:54 +00:00
```sql
2025-03-10 06:14:20 +00:00
taos> select weekofyear('2000-01-01');
weekofyear('2000-01-01') |
===========================
52 |
2024-09-11 00:05:54 +00:00
```
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
## 选择函数
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
### 基础选择
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
选择函数根据语义在查询结果集中选择一行或多行结果返回。用户可以同时指定输出 ts 列或其他列(包括 tbname 和标签列),这样就可以方便地知道被选出的值是源于哪个数据行的。
2023-12-01 09:52:29 +00:00
2025-08-22 05:07:20 +00:00
#### BOTTOM
2023-12-01 09:52:29 +00:00
```sql
2025-08-21 05:42:57 +00:00
BOTTOM(expr, k)
2023-12-01 09:52:29 +00:00
```
2025-08-21 05:42:57 +00:00
**功能说明**:统计表/超级表中某列的值最小 **k** 个非 NULL 值。如果多条数据取值一样,全部取用又会超出 k 条限制时,系统会从相同值中随机选取符合要求的数量返回。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**返回数据类型**:同应用的字段。
2023-12-01 09:52:29 +00:00
**适用数据类型**:数值类型。
**适用于**:表和超级表。
2025-08-21 05:42:57 +00:00
**使用说明**:
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
- *k* 值取值范围 1≤*k*≤100。
- 系统同时返回该记录关联的时间戳列。
- 限制: BOTTOM 函数不支持 FILL 子句。
2025-08-22 05:07:20 +00:00
#### FIRST
2023-12-01 09:52:29 +00:00
```sql
2025-08-21 05:42:57 +00:00
FIRST(expr)
2023-12-01 09:52:29 +00:00
```
2025-08-21 05:42:57 +00:00
**功能说明**:统计表/超级表中某列的值最先写入的非 NULL 值。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**返回数据类型**:同应用的字段。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**适用数据类型**:所有字段。
2023-12-01 09:52:29 +00:00
**适用于**:表和超级表。
2025-08-21 05:42:57 +00:00
**使用说明**:
2025-03-20 11:05:15 +00:00
2025-08-21 05:42:57 +00:00
- 如果要返回各个列的首个(时间戳最小)非 NULL 值,可以使用 FIRST(\*) 查询超级表,且 multiResultFunctionStarReturnTags 设置为 0 (默认值) 时, FIRST(\*) 只返回超级表的普通列;设置为 1 时,返回超级表的普通列和标签列。
- 如果结果集中的某列全部为 NULL 值,则该列的返回结果也是 NULL;
- 如果结果集中所有列全部为 NULL 值,则不返回结果。
- 对于存在复合主键的表的查询,若最小时间戳的数据有多条,则只有对应的复合主键最小的数据被返回。
2025-08-22 05:07:20 +00:00
#### LAST
2023-12-01 09:52:29 +00:00
```sql
2025-08-21 05:42:57 +00:00
LAST(expr)
2023-12-01 09:52:29 +00:00
```
2025-08-21 05:42:57 +00:00
**功能说明**:统计表/超级表中某列的值最后写入的非 NULL 值。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**返回数据类型**:同应用的字段。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**适用数据类型**:所有字段。
2023-12-01 09:52:29 +00:00
**适用于**:表和超级表。
2025-02-14 07:50:53 +00:00
**使用说明**:
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
- 如果要返回各个列的最后(时间戳最大)一个非 NULL 值,可以使用 LAST(\*) 查询超级表,且 multiResultFunctionStarReturnTags 设置为 0 (默认值) 时, LAST(\*) 只返回超级表的普通列;设置为 1 时,返回超级表的普通列和标签列。
- 如果结果集中的某列全部为 NULL 值,则该列的返回结果也是 NULL; 如果结果集中所有列全部为 NULL 值,则不返回结果。
- 在用于超级表时,时间戳完全一样且同为最大的数据行可能有多个,那么会从中随机返回一条,而并不保证多次运行所挑选的数据行必然一致。
- 对于存在复合主键的表的查询,若最大时间戳的数据有多条,则只有对应的复合主键最大的数据被返回。
2023-12-01 09:52:29 +00:00
2025-08-22 05:07:20 +00:00
#### LAST_ROW
2023-12-01 09:52:29 +00:00
```sql
2025-08-21 05:42:57 +00:00
LAST_ROW(expr)
2023-12-01 09:52:29 +00:00
```
2025-08-21 05:42:57 +00:00
**功能说明**:返回表/超级表的最后一条记录。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**返回数据类型**:同应用的字段。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**适用数据类型**:所有字段。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**使用说明**:
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
- 如果要返回各个列的最后一条记录(时间戳最大),可以使用 LAST_ROW(\*) 查询超级表,且 multiResultFunctionStarReturnTags 设置为 0 (默认值) 时, LAST_ROW(\*) 只返回超级表的普通列;设置为 1 时,返回超级表的普通列和标签列。
- 在用于超级表时,时间戳完全一样且同为最大的数据行可能有多个,那么会从中随机返回一条,而并不保证多次运行所挑选的数据行必然一致。
- 与 LAST 函数一样,对于存在复合主键的表的查询,若最大时间戳的数据有多条,则只有对应的复合主键最大的数据被返回。
2025-08-22 05:07:20 +00:00
#### MAX
2025-03-10 06:14:20 +00:00
```sql
2025-08-21 05:42:57 +00:00
MAX(expr)
2025-03-10 06:14:20 +00:00
```
2025-08-21 05:42:57 +00:00
**功能说明**:统计表/超级表中某列的值最大值。
2025-03-10 06:14:20 +00:00
2025-08-21 05:42:57 +00:00
**返回数据类型**:同应用的字段。
2025-03-10 06:14:20 +00:00
2025-08-21 05:42:57 +00:00
**适用数据类型**: 数值类型、VARCHAR、NCHAR。
2025-03-10 06:14:20 +00:00
**适用于**:表和超级表。
2025-08-21 05:42:57 +00:00
**使用说明**:
2025-03-10 06:14:20 +00:00
2025-08-21 05:42:57 +00:00
- max 函数可以接受字符串作为输入参数,当输入参数为字符串类型时,返回最大的字符串值,从 v3.3.3.0 开始支持,之前的版本不支持字符串参数。
2025-03-10 06:14:20 +00:00
2025-08-22 05:07:20 +00:00
#### MIN
2025-03-10 06:14:20 +00:00
```sql
2025-08-21 05:42:57 +00:00
MIN(expr)
2025-03-10 06:14:20 +00:00
```
2025-08-21 05:42:57 +00:00
**功能说明**:统计表/超级表中某列的值最小值。
2025-03-10 06:14:20 +00:00
2025-08-21 05:42:57 +00:00
**返回数据类型**:同应用的字段。
2025-03-10 06:14:20 +00:00
2025-08-21 05:42:57 +00:00
**适用数据类型**: 数值类型、VARCHAR、NCHAR。
2025-03-10 06:14:20 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**使用说明**:
- min 函数可以接受字符串作为输入参数,当输入参数为字符串类型时,返回最大的字符串值,从 v3.3.3.0 开始支持,之前的版本不支持字符串参数。
2025-08-22 05:07:20 +00:00
#### TAIL
2023-12-01 09:52:29 +00:00
```sql
2025-08-21 05:42:57 +00:00
TAIL(expr, k [, offset_rows])
2023-12-01 09:52:29 +00:00
```
2025-08-21 05:42:57 +00:00
**功能说明**:返回跳过最后 offset_val 个,然后取连续 k 个记录,不忽略 NULL 值。offset_val 可以不输入。此时返回最后的 k 个记录。当有 offset_val 输入的情况下,该函数功能等效于 `order by ts desc LIMIT k OFFSET offset_val` 。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**参数范围**: k: [1,100] offset_val: [0,100]。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**返回数据类型**:同应用的字段。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**适用数据类型**:适合于除时间主键列外的任何类型。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**适用于**:表、超级表。
2025-08-22 05:07:20 +00:00
#### TOP
2025-03-10 06:14:20 +00:00
```sql
2025-08-21 05:42:57 +00:00
TOP(expr, k)
2025-03-10 06:14:20 +00:00
```
2025-08-21 05:42:57 +00:00
**功能说明**:统计表/超级表中某列的值最大 **k** 个非 NULL 值。如果多条数据取值一样,全部取用又会超出 k 条限制时,系统会从相同值中随机选取符合要求的数量返回。
2025-03-10 06:14:20 +00:00
2025-08-21 05:42:57 +00:00
**返回数据类型**:同应用的字段。
2025-03-10 06:14:20 +00:00
2025-08-21 05:42:57 +00:00
**适用数据类型**:数值类型。
2025-03-10 06:14:20 +00:00
2025-08-21 05:42:57 +00:00
**适用于**:表和超级表。
2025-03-10 06:14:20 +00:00
**使用说明**:
2025-08-21 05:42:57 +00:00
- *k* 值取值范围 1≤*k*≤100。
- 系统同时返回该记录关联的时间戳列。
- 限制: TOP 函数不支持 FILL 子句。
2025-03-10 06:14:20 +00:00
2025-08-21 05:42:57 +00:00
### 特殊选择
2025-08-22 05:07:20 +00:00
#### COLS
2023-12-01 09:52:29 +00:00
```sql
2025-08-21 05:42:57 +00:00
COLS(func(expr), output_expr1, [, output_expr2] ... )
2023-12-01 09:52:29 +00:00
```
2025-08-21 05:42:57 +00:00
**功能说明**:在选择函数 func(expr) 执行结果所在数据行上,执行表达式 output_expr1, [, output_expr2], 返回其结果, func(expr) 结果不输出。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**返回数据类型**:返回多列数据,每列数据类型为对应表达式返回结果的类型。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**适用数据类型**:全部类型字段。
2023-12-01 09:52:29 +00:00
**适用于**:表和超级表。
2025-08-21 05:42:57 +00:00
**使用说明**:
- func 函数类型:必须是单行选择函数(输出结果为一行的选择函数,例如 last 是单行选择函数,但 top 是多行选择函数)。
- 主要用于一个 sql 中获取多个选择函数结果关联列的场景,例如 `select cols(max(c0), ts), cols(max(c1), ts) from ...` 可用于获取 c0、c1 列最大值的不同 ts 值。
- 注意,函数 func 的结果并没有返回,如需输出 func 结果,可额外增加输出列,如 `select fist(ts), cols(first(ts), c1) from ...`
- 输出只有一列时,可以对 cols 函数设置别名。例如 `select cols(first(ts), c1) as c11 from ...`
- 输出一列或者多列时,可以对 cols 函数的每个输出列设置命名。例如 `select cols(first(ts), c1 as c11, c2 as c22)`
2025-08-22 05:07:20 +00:00
#### MODE
2023-12-01 09:52:29 +00:00
```sql
2025-08-21 05:42:57 +00:00
MODE(expr)
2023-12-01 09:52:29 +00:00
```
2025-08-21 05:42:57 +00:00
**功能说明**:返回出现频率最高的值,若存在多个频率相同的最高值,则随机输出其中某个值。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**返回数据类型**:与输入数据类型一致。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**适用数据类型**:全部类型字段。
2023-12-01 09:52:29 +00:00
**适用于**:表和超级表。
2025-08-22 05:07:20 +00:00
#### UNIQUE
2025-08-14 04:24:16 +00:00
2024-09-11 00:05:54 +00:00
```sql
2025-08-21 05:42:57 +00:00
UNIQUE(expr)
2024-09-11 00:05:54 +00:00
```
2025-03-10 06:14:20 +00:00
2025-08-21 05:42:57 +00:00
**功能说明**:返回该列数据去重后的值。该函数功能与 distinct 相似。对于相同的数据,返回时间戳最小的一条,对于存在复合主键的表的查询,若最小时间戳的数据有多条,则只有对应的复合主键最小的数据被返回。
2025-03-10 06:14:20 +00:00
2025-08-21 05:42:57 +00:00
**返回数据类型**:同应用的字段。
2025-03-10 06:14:20 +00:00
2025-08-21 05:42:57 +00:00
**适用数据类型**:全部类型字段。
2025-03-10 06:14:20 +00:00
2025-08-21 05:42:57 +00:00
**适用于**:表和超级表。
2025-03-10 06:14:20 +00:00
2025-08-21 05:42:57 +00:00
## 聚合函数
2025-03-10 06:14:20 +00:00
2025-08-21 05:42:57 +00:00
聚合函数为查询结果集的每一个分组返回单个结果行。可以由 GROUP BY 或窗口切分子句指定分组,如果没有,则整个查询结果集视为一个分组。
2025-03-10 06:14:20 +00:00
2025-08-21 05:42:57 +00:00
### 基础聚合
2025-03-20 11:05:15 +00:00
2025-08-22 05:07:20 +00:00
#### AVG
2025-03-10 06:14:20 +00:00
2024-09-11 00:05:54 +00:00
```sql
2025-08-21 05:42:57 +00:00
AVG(expr)
2024-09-11 00:05:54 +00:00
```
2025-08-21 05:42:57 +00:00
**功能说明**:统计指定字段的平均值。
2024-12-17 10:08:29 +00:00
2025-08-21 05:42:57 +00:00
**返回数据类型**: DOUBLE、DECIMAL。
2024-09-11 00:05:54 +00:00
**适用数据类型**:数值类型。
2023-12-01 09:52:29 +00:00
2024-09-11 00:05:54 +00:00
**适用于**:表和超级表。
2025-08-21 05:42:57 +00:00
**说明**: 当输入类型为 DECIMAL 类型时,输出类型也为 DECIMAL 类型,输出的 precision 和 scale 大小符合数据类型章节中的描述规则,通过计算 SUM 类型和 UINT64 的除法得到结果类型,若 SUM 的结果导致 DECIMAL 类型溢出,则报 DECIMAL OVERFLOW 错误。
2025-08-14 04:24:16 +00:00
2025-08-22 05:07:20 +00:00
#### COUNT
2024-09-11 00:05:54 +00:00
2025-08-21 05:42:57 +00:00
```sql
COUNT({* | expr})
2024-09-11 00:05:54 +00:00
```
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**功能说明**:统计指定字段的记录行数。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**返回数据类型**: BIGINT。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**适用数据类型**:全部类型字段。
2023-12-01 09:52:29 +00:00
**适用于**:表和超级表。
2025-02-14 07:50:53 +00:00
**使用说明**:
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
- 可以使用星号 (\*) 来替代具体的字段,使用星号 (\*) 返回全部记录数量。
- 如果统计字段是具体的列,则返回该列中非 NULL 值的记录数量。
2023-12-01 09:52:29 +00:00
2025-08-22 05:07:20 +00:00
#### LEASTSQUARES
2023-12-01 09:52:29 +00:00
```sql
2025-08-21 05:42:57 +00:00
LEASTSQUARES(expr, start_val, step_val)
2023-12-01 09:52:29 +00:00
```
2025-08-21 05:42:57 +00:00
**功能说明**: 统计表中某列的值的拟合直线方程。start_val 是自变量初始值, step_val 是自变量的步长值。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**返回数据类型**:字符串表达式(斜率、截距)。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**适用数据类型**: expr 必须是数值类型。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**适用于**:表。
2023-12-01 09:52:29 +00:00
2025-08-22 05:07:20 +00:00
#### SUM
2023-12-01 09:52:29 +00:00
```sql
2025-08-21 05:42:57 +00:00
SUM(expr)
2023-12-01 09:52:29 +00:00
```
2025-08-21 05:42:57 +00:00
**功能说明**:统计表/超级表中某列的和。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**返回数据类型**: DOUBLE、BIGINT、DECIMAL。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**适用数据类型**:数值类型。
2023-12-01 09:52:29 +00:00
**适用于**:表和超级表。
2025-08-21 05:42:57 +00:00
**说明**: 输入类型为 DECIMAL 类型时,输出类型为 DECIMAL(38, scale) , precision 为当前支持的最大值, scale 为输入类型的 scale, 若 SUM 的结果溢出时,报 DECIMAL OVERFLOW 错误。
2023-12-01 09:52:29 +00:00
2025-08-22 05:07:20 +00:00
#### STDDEV
2023-12-01 09:52:29 +00:00
```sql
2025-08-21 05:42:57 +00:00
STDDEV
2023-12-01 09:52:29 +00:00
```
2025-08-21 05:42:57 +00:00
**功能说明**:统计表中某列的总体标准差。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**返回数据类型**: DOUBLE。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**适用数据类型**:数值类型。
2023-12-01 09:52:29 +00:00
**适用于**:表和超级表。
2025-08-21 05:42:57 +00:00
**说明**:
2025-08-14 04:24:16 +00:00
2025-08-21 05:42:57 +00:00
- `STDDEV_POP` 函数等价于 `STDDEV` 函数,从 v3.3.3.0 开始支持。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**举例**:
2023-12-01 09:52:29 +00:00
```sql
2025-08-21 05:42:57 +00:00
taos> select id from test_stddev;
id |
==============
1 |
2 |
3 |
4 |
5 |
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
taos> select stddev_pop(id) from test_stddev;
stddev_pop(id) |
============================
1.414213562373095 |
```
2023-12-01 09:52:29 +00:00
2025-09-26 09:52:32 +00:00
#### STD
与 [STDDEV ](#stddev ) 函数的行为相同,从 v3.3.8.0 版本开始支持。
2025-08-22 05:07:20 +00:00
#### STDDEV_POP
2025-08-14 04:24:16 +00:00
2025-08-21 05:42:57 +00:00
与 [STDDEV ](#stddev ) 函数的行为相同
2023-12-01 09:52:29 +00:00
2025-09-26 09:52:32 +00:00
#### STDDEV_SAMP
2023-12-01 09:52:29 +00:00
```sql
2025-09-26 09:52:32 +00:00
STDDEV_SAMP
```
**功能说明**:统计表中某列的样本标准差。
**版本**: v3.3.8.0
**返回数据类型**: DOUBLE。
**适用数据类型**:数值类型。
**适用于**:表和超级表。
**举例**:
```sql
taos> select id from test_stddev;
id |
==============
1 |
2 |
3 |
4 |
5 |
taos> select stddev_samp(id) from test_stddev;
stddev_samp(id) |
============================
1.58113883008419 |
```
#### VARIANCE
```sql
VARIANCE(expr)
2023-12-01 09:52:29 +00:00
```
2025-08-21 05:42:57 +00:00
**功能说明**:统计表中某列的总体方差。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**版本**: v3.3.3.0
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**返回数据类型**: DOUBLE。
**适用数据类型**:数值类型。
2023-12-01 09:52:29 +00:00
**适用于**:表和超级表。
2025-08-21 05:42:57 +00:00
**举例**:
2025-08-14 04:24:16 +00:00
2025-08-21 05:42:57 +00:00
```sql
taos> select id from test_var;
id |
==============
3 |
1 |
2 |
4 |
5 |
2023-12-01 09:52:29 +00:00
2025-09-26 09:52:32 +00:00
taos> select variance(id) from test_var;
2025-08-21 05:42:57 +00:00
var_pop(id) |
============================
2.000000000000000 |
```
2025-09-26 09:52:32 +00:00
#### VAR_POP
与 [VARIANCE ](#variance ) 函数的行为相同
#### VAR_SAMP
```sql
VAR_SAMP(expr)
```
**功能说明**:统计表中某列的样本方差。
**版本**: v3.3.8.0
**返回数据类型**: DOUBLE。
**适用数据类型**:数值类型。
**适用于**:表和超级表。
**举例**:
```sql
taos> select id from test_var;
id |
==============
3 |
1 |
2 |
4 |
5 |
taos> select var_samp(id) from test_var;
var_samp(id) |
============================
2.500000000000000 |
```
2025-08-22 05:07:20 +00:00
#### SPREAD
2023-12-01 09:52:29 +00:00
```sql
2025-08-21 05:42:57 +00:00
SPREAD(expr)
2023-12-01 09:52:29 +00:00
```
2025-08-21 05:42:57 +00:00
**功能说明**:统计表中某列的最大值和最小值之差。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**返回数据类型**: DOUBLE。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**适用数据类型**: INTEGER、TIMESTAMP。
2023-12-01 09:52:29 +00:00
**适用于**:表和超级表。
2025-09-26 09:52:32 +00:00
#### GROUP_CONCAT
```sql
GROUP_CONCAT(expr)
```
**功能说明**:将多个字段值连接为一个字符串。
**版本**: v3.3.8.0
**返回数据类型**: VARCHAR。
**适用数据类型**:字符串类型。
**适用于**:表和超级表。
**举例**:
```sql
taos> select str1, str2 from test_var;
id | id |
=============================
a1 | b1 |
a2 | b2 |
a3 | b3 |
taos> select group_concat(str1, str2, ':') from test_var;
group_concat(str1, str2, ':') |
==========================================
a1b1:a2b2:a3b3 |
```
2025-08-21 05:42:57 +00:00
### 分位数与近似统计
2025-08-22 05:07:20 +00:00
#### APERCENTILE
2023-12-01 09:52:29 +00:00
```sql
2025-08-21 05:42:57 +00:00
APERCENTILE(expr, p [, algo_type])
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
algo_type: {
"default"
| "t-digest"
}
```
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**功能说明**:统计表/超级表中指定列的值的近似百分比分位数,与 PERCENTILE 函数相似,但是返回近似结果。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**返回数据类型**: DOUBLE。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**适用数据类型**:数值类型。
2023-12-01 09:52:29 +00:00
**适用于**:表和超级表。
2025-08-21 05:42:57 +00:00
**说明**:
- p 值范围是 [0,100],当为 0 时等同 于 MIN, 为 100 时等同于 MAX。
- algo_type 取值为 "default" 或 "t-digest"。输入为 "default" 时函数使用基于直方图算法进行计算。输入为 "t-digest" 时使用 t-digest 算法计算分位数的近似结果。如果不指定 algo_type 则使用 "default" 算法。
- t-digest 算法的近似结果对于输入数据顺序敏感,对超级表查询时不同的输入排序结果可能会有微小的误差。
2025-08-22 05:07:20 +00:00
#### PERCENTILE
2023-12-01 09:52:29 +00:00
```sql
2025-08-21 05:42:57 +00:00
PERCENTILE(expr, p [, p1] ... )
2023-12-01 09:52:29 +00:00
```
2025-08-21 05:42:57 +00:00
**功能说明**:统计表中某列的值百分比分位数。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**返回数据类型**:该函数最小参数个数为 2 个,最大参数个数为 11 个。可以最多同时返回 10 个百分比分位数。当参数个数为 2 时,返回一个分位数,类型为 DOUBLE, 当参数个数大于 2 时,返回类型为 VARCHAR, 格式为包含多个返回值的 JSON 数组。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**应用字段**:数值类型。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**适用于**:表。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**使用说明**:
2023-12-01 09:52:29 +00:00
2025-09-18 00:35:03 +00:00
- PERCENTILE 函数不支持虚拟表。
2025-08-21 05:42:57 +00:00
- *P* 值取值范围 0≤*P*≤100, 为 0 的时候等同于 MIN, 为 100 的时候等同于 MAX;
- 同时计算针对同一列的多个分位数时,建议使用一个 PERCENTILE 函数和多个参数的方式,能很大程度上降低查询的响应时间。
比如,使用查询 `SELECT percentile(col, 90, 95, 99) FROM table` ,性能会优于 `SELECT percentile(col, 90), percentile(col, 95), percentile(col, 99) from table` 。
### 特殊聚合
2025-08-22 05:07:20 +00:00
#### ELAPSED
2023-12-01 09:52:29 +00:00
```sql
2025-08-21 05:42:57 +00:00
ELAPSED(ts_primary_key [, time_unit])
2023-12-01 09:52:29 +00:00
```
2025-08-21 05:42:57 +00:00
**功能说明**: `elapsed` 函数表达了统计周期内连续的时间长度,和 twa 函数配合使用可以计算统计曲线下的面积。在通过 INTERVAL 子句指定窗口的情况下,统计在给定时间范围内的每个窗口内有数据覆盖的时间范围;如果没有 INTERVAL 子句, 则返回整个给定时间范围内的有数据覆盖的时间范围。注意, ELAPSED 返回的并不是时间范围的绝对值,而是绝对值除以 time_unit 所得到的单位个数。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**返回结果类型**: DOUBLE。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**适用数据类型**: TIMESTAMP。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**适用于**:表、超级表、嵌套查询的外层查询。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**说明**:
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
- `ts_primary_key` 参数只能是表的第一列,即 TIMESTAMP 类型的主键列。
- 返回值的时间单位由 `time_unit` 参数指定,最小是数据库的时间分辨率。`time_unit` 参数未指定时,以数据库的时间分辨率为时间单位。支持的时间单位 `time_unit` 如下: 1b(纳秒)、1u(微秒)、1a(毫秒)、1s(秒)、1m(分)、1h(小时)、1d(天)、1w(周)。
- 可以和 interval 组合使用,返回每个时间窗口的时间戳差值。需要特别注意的是,除第一个时间窗口和最后一个时间窗口外,中间窗口的时间戳差值均为窗口长度。
- order by asc/desc 不影响差值的计算结果。
- 对于超级表,需要和 group by tbname 子句组合使用,不可以直接使用。
- 对于普通表,不支持和 group by 子句组合使用。
- 对于嵌套查询,仅当内层查询会输出隐式时间戳列时有效。例如 `select elapsed(ts) from (select diff(value) from sub1)` 语句, diff 函数会让内层查询输出隐式时间戳列,此为主键列,可以用于 elapsed 函数的第一个参数。相反,例如 `select elapsed(ts) from (select * from sub1)` 语句, ts 列输出到外层时已经没有了主键列的含义,无法使用 elapsed 函数。此外, elapsed 函数作为一个与时间线强依赖的函数,形如 `select elapsed(ts) from (select diff(value) from st group by tbname)` 尽管会返回一条计算结果,但并无实际意义,这种用法后续也将被限制。
- 不支持与 leastsquares、diff、derivative、top、bottom、last_row、interp 等函数混合使用。
2023-12-01 09:52:29 +00:00
2025-08-22 05:07:20 +00:00
#### HISTOGRAM
2023-12-01 09:52:29 +00:00
```sql
2025-08-21 05:42:57 +00:00
HISTOGRAM(expr, bin_type, bin_description, normalized)
2023-12-01 09:52:29 +00:00
```
2025-08-21 05:42:57 +00:00
**功能说明**:统计数据按照用户指定区间的分布。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**返回结果类型**:如归一化参数 normalized 设置为 1, 返回结果为 DOUBLE 类型,否则为 BIGINT 类型。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**适用数据类型**:数值型字段。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**适用于**:表和超级表。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
**详细说明**:
- bin_type 用户指定的分桶类型,有效输入类型为 "user_input"、"linear_bin"、"log_bin"。
- bin_description 描述如何生成分桶区间,针对三种桶类型,分别为以下描述格式 (均为 JSON 格式字符串):
- "user_input": "[1, 3, 5, 7]"
用户指定 bin 的具体数值。
- "linear_bin": "\{"start": 0.0, "width": 5.0, "count": 5, "infinity": true}"
"start" 表示数据起始点,"width" 表示每次 bin 偏移量,"count" 为 bin 的总数,"infinity" 表示是否添加(-inf, inf) 作为区间起点和终点,
生成区间为[-inf, 0.0, 5.0, 10.0, 15.0, 20.0, +inf]。
- "log_bin": "\{"start":1.0, "factor": 2.0, "count": 5, "infinity": true}"
"start" 表示数据起始点,"factor" 表示按指数递增的因子,"count" 为 bin 的总数,"infinity" 表示是否添加(-inf, inf) 作为区间起点和终点,
生成区间为[-inf, 1.0, 2.0, 4.0, 8.0, 16.0, +inf]。
- normalized 是否将返回结果归一化到 0~1 之间。有效输入为 0 和 1。
2025-08-22 05:07:20 +00:00
#### HYPERLOGLOG
2025-02-21 03:05:08 +00:00
```sql
2025-08-21 05:42:57 +00:00
HYPERLOGLOG(expr)
2025-02-21 03:05:08 +00:00
```
2025-08-21 05:42:57 +00:00
**功能说明**:
2025-02-21 03:05:08 +00:00
2025-08-21 05:42:57 +00:00
- 采用 hyperloglog 算法,返回某列的基数。该算法在数据量很大的情况下,可以明显降低内存的占用,求出来的基数是个估算值,标准误差(标准误差是多次实验,每次的平均数的标准差,不是与真实结果的误差)为 0.81%。
- 在数据量较少的时候该算法不是很准确,可以使用 `select count(data) from (select unique(col) as data from table)` 的方法。
2025-02-21 03:05:08 +00:00
2025-08-21 05:42:57 +00:00
**返回结果类型**: INTEGER。
2025-02-21 03:05:08 +00:00
2025-08-21 05:42:57 +00:00
**适用数据类型**:任何类型。
2025-08-14 04:24:16 +00:00
2025-08-21 05:42:57 +00:00
**适用于**:表和超级表。
2025-02-21 03:05:08 +00:00
2025-09-26 09:52:32 +00:00
## 比较函数
### IF
```sql
IF(expr1, expr2, expr3)
```
**功能说明**:如果 expr1 为真,返回 expr2, 否则返回 expr3。
**返回结果类型**:依赖于使用的上下文。
**适用于**:表达式。
**使用说明**:
- 类似于 CASE 表达式。
**举例**:
```sql
taos> SELECT IF(1>2,2,3);
if(1>2,2,3) |
========================
3 |
```
### IFNULL
```sql
IFNULL(expr1, expr2)
```
**功能说明**:如果 expr1 非空真,返回 expr1, 否则返回 expr2。
**返回结果类型**:依赖于使用的上下文。
**适用于**:表达式。
**举例**:
```sql
taos> SELECT IFNULL(1,0);
ifnull(1,0) |
========================
1 |
```
### NVL
与 [IFNULL ](#ifnull ) 函数的行为相同
### NULLIF
```sql
NULLIF(expr1, expr2)
```
**功能说明**:如果 expr1 = expr2, 返回 NULL, 否则返回 expr1。
**返回结果类型**:依赖于使用的上下文。
**适用于**:表达式。
**举例**:
```sql
taos> SELECT NULLIF(1,1);
nullif(1,1) |
========================
NULL |
```
### NVL2
```sql
NVL2(expr1, expr2, expr3)
```
2025-10-20 10:06:27 +00:00
**功能说明**:如果 expr1 非空值,返回 expr2, 否则返回 expr3。
2025-09-26 09:52:32 +00:00
**返回结果类型**:依赖于使用的上下文。
**适用于**:表达式。
**举例**:
```sql
taos> SELECT NVL2(NULL,1,2);
nvl2(null,1,2) |
========================
2 |
```
2025-08-21 05:42:57 +00:00
## 时序函数
2023-12-01 09:52:29 +00:00
2025-08-14 04:22:42 +00:00
时序数据特有函数是 TDengine TSDB 为了满足时序数据的查询场景而量身定做出来的。在通用数据库中, 实现类似功能通常需要复杂的查询语法, 且效率很低。TDengine TSDB 以函数的方式内置了这些功能,最大程度的减轻了用户的使用成本。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
### 窗口计算
2025-08-22 05:07:20 +00:00
#### CSUM
2023-12-01 09:52:29 +00:00
```sql
CSUM(expr)
```
2024-07-03 08:33:55 +00:00
**功能说明**: 累加和( Cumulative sum) , 忽略 NULL 值。
2023-12-01 09:52:29 +00:00
2025-03-05 02:47:03 +00:00
**返回结果类型**: 输入列如果是整数类型返回值为长整型( bigint) , 浮点数返回值为双精度浮点数( double) 。无符号整数类型返回值为无符号长整型( unsigned bigint) 。
2023-12-01 09:52:29 +00:00
**适用数据类型**:数值类型。
2025-02-14 07:50:53 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2023-12-01 09:52:29 +00:00
**适用于**:表和超级表。
**使用说明**:
2025-08-14 04:24:16 +00:00
2023-12-01 09:52:29 +00:00
- 不支持 +、-、*、/ 运算,如 csum(col1) + csum(col2)。
2025-02-14 07:50:53 +00:00
- 只能与聚合( Aggregation) 函数一起使用。该函数可以应用在普通表和超级表上。
2023-12-01 09:52:29 +00:00
2025-08-22 05:07:20 +00:00
#### DERIVATIVE
2023-12-01 09:52:29 +00:00
```sql
DERIVATIVE(expr, time_interval, ignore_negative)
ignore_negative: {
0
| 1
}
```
2024-04-26 06:30:34 +00:00
**功能说明**:统计表中某列数值的单位变化率。其中单位时间区间的长度可以通过 time_interval 参数指定,最小可以是 1 秒( 1s) ; ignore_negative 参数的值可以是 0 或 1, 为 1 时表示忽略负值。对于存在复合主键的表的查询,若时间戳相同的数据存在多条,则只有对应的复合主键最小的数据参与运算。
2023-12-01 09:52:29 +00:00
**返回数据类型**: DOUBLE。
**适用数据类型**:数值类型。
**适用于**:表和超级表。
2025-02-14 07:50:53 +00:00
**使用说明**:
2023-12-01 09:52:29 +00:00
2025-03-05 02:47:03 +00:00
- 可以与选择相关联的列一起使用。例如 `select \_rowts, DERIVATIVE(col1, 1s, 1) from tb1` 。
2023-12-01 09:52:29 +00:00
2025-08-22 05:07:20 +00:00
#### DIFF
2023-12-01 09:52:29 +00:00
```sql
2024-07-10 01:15:10 +00:00
DIFF(expr [, ignore_option])
2023-12-01 09:52:29 +00:00
2024-07-10 01:15:10 +00:00
ignore_option: {
2023-12-01 09:52:29 +00:00
0
| 1
2024-07-10 01:15:10 +00:00
| 2
| 3
2023-12-01 09:52:29 +00:00
}
```
2025-08-21 05:42:57 +00:00
**功能说明**: 统计表中特定列与之前行的当前列有效值之差。ignore_option 取值为 0-3, 可以不填, 默认值为 0。
2025-03-05 11:45:35 +00:00
- `0` 表示 diff 结果不忽略负值不忽略 null 值
- `1` 表示 diff 结果的负值作为 null 值
- `2` 表示 diff 结果不忽略负值但忽略 null 值
- `3` 表示 diff 结果忽略负值且忽略 null 值
2024-07-10 01:15:10 +00:00
- 对于存在复合主键的表的查询,若时间戳相同的数据存在多条,则只有对应的复合主键最小的数据参与运算。
2023-12-01 09:52:29 +00:00
2025-03-05 02:47:03 +00:00
**返回数据类型**: bool、时间戳及整型数值类型均返回 bigint, 浮点类型返回 double, 若 diff 结果溢出则返回溢出后的值。
2023-12-01 09:52:29 +00:00
2024-07-10 01:15:10 +00:00
**适用数据类型**:数值类型、时间戳和 bool 类型。
2023-12-01 09:52:29 +00:00
**适用于**:表和超级表。
2025-02-14 07:50:53 +00:00
**使用说明**:
2023-12-01 09:52:29 +00:00
2024-07-10 07:18:19 +00:00
- diff 是计算本行特定列与同列的前一个有效数据的差值,同列的前一个有效数据:指的是同一列中时间戳较小的最临近的非空值。
2025-03-05 11:45:35 +00:00
- 数值类型 diff 结果为对应的算术差值; 时间戳类型根据数据库的时间戳精度进行差值计算; bool 类型计算差值时 true 视为 1, false 视为 0。
- 如当前行数据为 null 或者没有找到同列前一个有效数据时, diff 结果为 null。
2025-04-01 12:34:47 +00:00
- 忽略负值时( ignore_option 设置为 1 或 3) , 如果 diff 结果为负值,则结果设置为 null, 然后根据 null 值过滤规则进行过滤。
2025-03-05 11:45:35 +00:00
- 当 diff 结果发生溢出时,结果是否是 `应该忽略的负值` 取决于逻辑运算结果是正数还是负数,例如 9223372036854775800 - (-9223372036854775806) 的值超出 BIGINT 的范围, diff 结果会显示溢出值 -10, 但并不会被作为负值忽略。
- 单个语句中可以使用单个或者多个 diff, 并且每个 diff 可以指定相同或不同的 ignore_option, 当单个语句中存在多个 diff 时当且仅当某行所有 diff 的结果都为 null, 并且 ignore_option 都设置为忽略 null 值,该行才从结果集中剔除。
2025-03-05 02:47:03 +00:00
- 可以选择与相关联的列一起使用。例如 `select _rowts, DIFF() from` 。
2025-03-05 11:45:35 +00:00
- 当没有复合主键时,如果不同的子表有相同时间戳的数据,会提示 "Duplicate timestamps not allowed"。
2024-07-10 07:18:19 +00:00
- 当使用复合主键时,不同子表的时间戳和主键组合可能相同,使用哪一行取决于先找到哪一行,这意味着在这种情况下多次运行 diff() 的结果可能会不同。
2023-12-01 09:52:29 +00:00
2025-08-22 05:07:20 +00:00
#### IRATE
2023-12-01 09:52:29 +00:00
```sql
IRATE(expr)
```
2024-04-26 06:30:34 +00:00
**功能说明**:计算瞬时增长率。使用时间区间中最后两个样本数据来计算瞬时增长速率;如果这两个值呈递减关系,那么只取最后一个数用于计算,而不是使用二者差值。对于存在复合主键的表的查询,若时间戳相同的数据存在多条,则只有对应的复合主键最小的数据参与运算。
2023-12-01 09:52:29 +00:00
**返回数据类型**: DOUBLE。
**适用数据类型**:数值类型。
**适用于**:表和超级表。
2025-08-22 05:07:20 +00:00
#### MAVG
2023-12-01 09:52:29 +00:00
```sql
MAVG(expr, k)
```
2025-02-14 07:50:53 +00:00
**功能说明**:计算连续 k 个值的移动平均数( moving average) 。如果输入行数小于 k, 则无结果输出。参数 k 的合法输入范围是 1≤ k ≤ 1000。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**返回结果类型**: DOUBLE。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**适用数据类型**:数值类型。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**嵌套子查询支持**:适用于内层查询和外层查询。
2023-12-01 09:52:29 +00:00
**适用于**:表和超级表。
**使用说明**:
- 不支持 +、-、*、/ 运算,如 mavg(col1, k1) + mavg(col2, k1);
- 只能与普通列, 选择( Selection) 、投影( Projection) 函数一起使用, 不能与聚合( Aggregation) 函数一起使用;
2025-08-22 05:07:20 +00:00
#### STATECOUNT
2023-12-01 09:52:29 +00:00
```sql
STATECOUNT(expr, oper, val)
```
2025-04-01 12:34:47 +00:00
**功能说明**:返回满足某个条件的连续记录的个数,结果作为新的一列追加在每行后面。条件根据参数计算,如果条件为 true 则加 1, 条件为 false 则重置为 -1, 如果数据为 NULL, 跳过该条数据。
2023-12-01 09:52:29 +00:00
**参数范围**:
2025-02-14 07:50:53 +00:00
- oper: "LT" (小于)、"GT"(大于)、"LE"(小于等于)、"GE"(大于等于)、"NE"(不等于)、"EQ"(等于),不区分大小写。
- val: 数值型
2023-12-01 09:52:29 +00:00
**返回结果类型**: INTEGER。
**适用数据类型**:数值类型。
**嵌套子查询支持**:不支持应用在子查询上。
**适用于**:表和超级表。
**使用说明**:
2025-03-05 02:47:03 +00:00
- 不能和窗口操作一起使用,例如 `interval/state_window/session_window` 。
2023-12-01 09:52:29 +00:00
2025-08-22 05:07:20 +00:00
#### STATEDURATION
2023-12-01 09:52:29 +00:00
```sql
STATEDURATION(expr, oper, val, unit)
```
2025-04-01 12:34:47 +00:00
**功能说明**:返回满足某个条件的连续记录的时间长度,结果作为新的一列追加在每行后面。条件根据参数计算,如果条件为 true 则加上两个记录之间的时间长度(第一个满足条件的记录时间长度记为 0) , 条件为 false 则重置为 -1, 如果数据为 NULL, 跳过该条数据。
2023-12-01 09:52:29 +00:00
**参数范围**:
2025-03-05 11:45:35 +00:00
- oper: `'LT'` (小于)、`'GT'`(大于)、`'LE'`(小于等于)、`'GE'`(大于等于)、`'NE'`(不等于)、`'EQ'`(等于),不区分大小写,但需要用 `''` 包括。
2025-02-14 07:50:53 +00:00
- val: 数值型
- unit: 时间长度的单位, 可取值时间单位: 1b(纳秒)、1u(微秒)、1a(毫秒)、1s(秒)、1m(分)、1h(小时)、1d(天)、1w(周)。如果省略,默认为当前数据库精度。
2023-12-01 09:52:29 +00:00
**返回结果类型**: INTEGER。
**适用数据类型**:数值类型。
**嵌套子查询支持**:不支持应用在子查询上。
**适用于**:表和超级表。
**使用说明**:
2025-02-14 07:50:53 +00:00
- 不能和窗口操作一起使用,例如 interval、state_window、session_window。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
### 时间加权统计
2025-08-22 05:07:20 +00:00
#### TWA
2023-12-01 09:52:29 +00:00
```sql
TWA(expr)
```
2025-08-06 10:13:54 +00:00
**功能说明**:时间加权平均函数。统计表中某列在一段时间内的时间加权平均。对于存在复合主键的表的查询,若时间戳相同的数据存在多条,则只有对应的复合主键最小的数据参与运算。
2023-12-01 09:52:29 +00:00
**返回数据类型**: DOUBLE。
**适用数据类型**:数值类型。
**适用于**:表和超级表。
2025-08-21 05:42:57 +00:00
### 插值与采样
2025-08-22 05:07:20 +00:00
#### INTERP
2025-08-21 05:42:57 +00:00
```sql
INTERP(expr [, ignore_null_values])
ignore_null_values: {
0
| 1
}
```
**功能说明**: 返回指定时间截面指定列的记录值或插值。ignore_null_values 参数的值可以是 0 或 1, 为 1 时表示忽略 NULL 值,缺省值为 0。
**返回数据类型**:同字段类型。
**适用数据类型**:数值类型。
**适用于**:表和超级表。
**使用说明**:
- INTERP 用于在指定时间断面获取指定列的记录值,使用时有专用语法 (interp_clause),语法介绍 [参考链接 ](../select/#interp ) 。
- 当指定时间断面不存在符合条件的行数据时, INTERP 函数会根据 [FILL ](../distinguished/#fill-子句 ) 参数的设定进行插值。
- INTERP 作用于超级表时,会将该超级表下的所有子表数据按照主键列排序后进行插值计算,也可以搭配 PARTITION BY tbname 使用,将结果强制规约到单个时间线。
- INTERP 在 FILL PREV/NEXT/NEAR时, 行为与窗口查询有所区别,当截面存在数据时,不会进行 FILL, 即便当前值为 NULL.
- INTERP 可以与伪列 `_irowts` 一起使用,返回插值点所对应的时间戳 (v3.0.2.0 以后支持)。
- INTERP 可以与伪列 `_isfilled` 一起使用,显示返回结果是否为原始记录或插值算法产生的数据 (v3.0.3.0 以后支持)。
- 只有在使用 FILL PREV/NEXT/NEAR 模式时才可以使用伪列 `_irowts_origin` , 用于返回 `interp` 函数所使用的原始数据的时间戳列。若范围内无值,则返回 NULL。`_irowts_origin` 在 v3.3.4.9 以后支持。
- 对于带复合主键的表的查询,若存在相同时间戳的数据,则只有对应的复合主键最小的数据参与运算。
2025-08-22 05:07:20 +00:00
#### SAMPLE
2025-08-21 05:42:57 +00:00
```sql
SAMPLE(expr, k)
```
**功能说明**:获取数据的 k 个采样值。参数 k 的合法输入范围是 1≤ k ≤ 1000。
**返回结果类型**:同原始数据类型。
**适用数据类型**:全部类型字段。
**嵌套子查询支持**:适用于内层查询和外层查询。
**适用于**:表和超级表。
## 系统与元信息函数
### 数据库环境信息
2023-12-01 09:52:29 +00:00
2025-08-22 05:07:20 +00:00
#### CLIENT_VERSION
2023-12-01 09:52:29 +00:00
```sql
2025-03-10 06:14:20 +00:00
SELECT CLIENT_VERSION();
2023-12-01 09:52:29 +00:00
```
2025-03-10 06:14:20 +00:00
**说明**:返回客户端版本。
2023-12-01 09:52:29 +00:00
2025-08-22 05:07:20 +00:00
#### CURRENT_USER
2023-12-01 09:52:29 +00:00
```sql
2025-03-10 06:14:20 +00:00
SELECT CURRENT_USER();
2023-12-01 09:52:29 +00:00
```
2025-03-10 06:14:20 +00:00
**说明**:获取当前用户。
2023-12-01 09:52:29 +00:00
2025-08-22 05:07:20 +00:00
#### DATABASE
2023-12-01 09:52:29 +00:00
```sql
2025-03-10 06:14:20 +00:00
SELECT DATABASE();
2023-12-01 09:52:29 +00:00
```
2025-03-10 06:50:34 +00:00
**说明**:返回当前登录的数据库。如果登录的时候没有指定默认数据库,且没有使用 USE 命令切换数据库,则返回 NULL。
2023-12-01 09:52:29 +00:00
2025-08-22 05:07:20 +00:00
#### SERVER_VERSION
2023-12-01 09:52:29 +00:00
```sql
2025-08-21 05:42:57 +00:00
SELECT SERVER_VERSION();
2023-12-01 09:52:29 +00:00
```
2025-08-21 05:42:57 +00:00
**说明**:返回服务端版本。
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
### 系统状态
2025-08-22 05:07:20 +00:00
#### SERVER_STATUS
2023-12-01 09:52:29 +00:00
```sql
2025-08-21 05:42:57 +00:00
SELECT SERVER_STATUS();
2023-12-01 09:52:29 +00:00
```
2025-08-21 05:42:57 +00:00
**说明**:检测服务端是否所有 dnode 都在线,如果是则返回成功,否则返回无法建立连接的错误。如果想要查询集群的状态,推荐使用 `SHOW CLUSTER ALIVE` 与 `SELECT SERVER_STATUS()` 不同,当集群中的部分节点不可用时,它不会返回错误,而是返回不同的状态码,详见:[SHOW CLUSTER ALIVE](https://docs.taosdata.com/reference/taos-sql/show/#show-cluster-alive)
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
## 地理信息函数
2023-12-01 09:52:29 +00:00
2025-08-21 05:42:57 +00:00
### 空间对象构造
2023-12-01 09:52:29 +00:00
#### ST_GeomFromText
```sql
ST_GeomFromText(VARCHAR WKT expr)
```
**功能说明**:根据 Well-Known Text (WKT) 表示从指定的几何值创建几何数据。
2025-02-14 07:50:53 +00:00
**返回值类型**: GEOMETRY。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**适用数据类型**: VARCHAR。
2023-12-01 09:52:29 +00:00
2025-03-05 02:47:03 +00:00
**适用表类型**:标准表和超表。
2023-12-01 09:52:29 +00:00
**使用说明**:输入可以是 WKT 字符串之一, 例如点( POINT) 、线串( LINESTRING) 、多边形( POLYGON) 、多点集( MULTIPOINT) 、多线串( MULTILINESTRING) 、多多边形( MULTIPOLYGON) 、几何集合( GEOMETRYCOLLECTION) 。输出是以二进制字符串形式定义的 GEOMETRY 数据类型。
2025-08-21 05:42:57 +00:00
### 空间数据输出
2023-12-01 09:52:29 +00:00
#### ST_AsText
```sql
ST_AsText(GEOMETRY geom)
```
**功能说明**:从几何数据中返回指定的 Well-Known Text (WKT) 表示。
2025-02-14 07:50:53 +00:00
**返回值类型**: VARCHAR。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**适用数据类型**: GEOMETRY。
2023-12-01 09:52:29 +00:00
2025-03-05 02:47:03 +00:00
**适用表类型**:标准表和超表。
2023-12-01 09:52:29 +00:00
**使用说明**:输出可以是 WKT 字符串之一, 例如点( POINT) 、线串( LINESTRING) 、多边形( POLYGON) 、多点集( MULTIPOINT) 、多线串( MULTILINESTRING) 、多多边形( MULTIPOLYGON) 、几何集合( GEOMETRYCOLLECTION) 。
2025-08-21 05:42:57 +00:00
### 空间关系判断
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
#### ST_Contains
2023-12-01 09:52:29 +00:00
```sql
2025-03-10 06:14:20 +00:00
ST_Contains(GEOMETRY geomA, GEOMETRY geomB)
2023-12-01 09:52:29 +00:00
```
2025-03-10 06:14:20 +00:00
**功能说明**:如果 A 包含 B, 描述: 如果几何形状 A 包含几何形状 B, 则返回 TRUE。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**返回值类型**: BOOL。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**适用数据类型**: GEOMETRY、GEOMETRY。
2023-12-01 09:52:29 +00:00
2025-03-05 02:47:03 +00:00
**适用表类型**:标准表和超表。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**使用说明**: A 包含 B 当且仅当 B 的所有点位于 A 的内部( 即位于内部或边界上) ( 或等效地, B 的没有点位于 A 的外部),并且 A 和 B 的内部至少有一个公共点。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
#### ST_ContainsProperly
2023-12-01 09:52:29 +00:00
```sql
2025-03-10 06:14:20 +00:00
ST_ContainsProperly(GEOMETRY geomA, GEOMETRY geomB)
2023-12-01 09:52:29 +00:00
```
2025-03-10 06:14:20 +00:00
**功能说明**:如果 B 的每个点都位于 A 内部,则返回 TRUE。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**返回值类型**: BOOL。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**适用数据类型**: GEOMETRY、GEOMETRY。
2023-12-01 09:52:29 +00:00
2025-03-05 02:47:03 +00:00
**适用表类型**:标准表和超表。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**使用说明**: B 的没有点位于 A 的边界或外部。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
#### ST_Covers
2023-12-01 09:52:29 +00:00
```sql
2025-03-10 06:14:20 +00:00
ST_Covers(GEOMETRY geomA, GEOMETRY geomB)
2023-12-01 09:52:29 +00:00
```
2025-03-10 06:14:20 +00:00
**功能说明**:如果 B 中的每个点都位于几何形状 A 内部(与内部或边界相交),则返回 TRUE。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**返回值类型**: BOOL。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**适用数据类型**: GEOMETRY、GEOMETRY。
2023-12-01 09:52:29 +00:00
2025-03-05 02:47:03 +00:00
**适用表类型**:标准表和超表。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**使用说明**: A 包含 B 意味着 B 中的没有点位于 A 的外部(在外部)。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
#### ST_Equals
2023-12-01 09:52:29 +00:00
```sql
2025-03-10 06:14:20 +00:00
ST_Equals(GEOMETRY geomA, GEOMETRY geomB)
2023-12-01 09:52:29 +00:00
```
2025-03-10 06:14:20 +00:00
**功能说明**:如果给定的几何对象是"空间相等"的,则返回 TRUE。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**返回值类型**: BOOL。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**适用数据类型**: GEOMETRY、GEOMETRY。
2023-12-01 09:52:29 +00:00
2025-03-05 02:47:03 +00:00
**适用表类型**:标准表和超表。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**使用说明**: "空间相等"意味着 ST_Contains(A,B) = true 和 ST_Contains(B,A) = true, 并且点的顺序可能不同, 但表示相同的几何结构。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
#### ST_Intersects
2023-12-01 09:52:29 +00:00
```sql
2025-03-10 06:14:20 +00:00
ST_Intersects(GEOMETRY geomA, GEOMETRY geomB)
2023-12-01 09:52:29 +00:00
```
2025-08-21 05:42:57 +00:00
**功能说明**:比较两个几何对象,并在它们相交时返回 true。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**返回值类型**: BOOL。
2023-12-01 09:52:29 +00:00
2025-03-05 02:47:03 +00:00
**适用数据类型**: GEOMETRY、GEOMETRY。
2023-12-01 09:52:29 +00:00
2025-03-05 02:47:03 +00:00
**适用表类型**:标准表和超表。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**使用说明**:如果两个几何对象有任何一个共享点,则它们相交。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
#### ST_Touches
2023-12-01 09:52:29 +00:00
```sql
2025-03-10 06:14:20 +00:00
ST_Touches(GEOMETRY geomA, GEOMETRY geomB)
2023-12-01 09:52:29 +00:00
```
2025-03-10 06:14:20 +00:00
**功能说明**:如果 A 和 B 相交,但它们的内部不相交,则返回 TRUE。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**返回值类型**: BOOL。
2023-12-01 09:52:29 +00:00
2025-02-14 07:50:53 +00:00
**适用数据类型**: GEOMETRY、GEOMETRY。
2023-12-01 09:52:29 +00:00
2025-03-05 02:47:03 +00:00
**适用表类型**:标准表和超表。
2023-12-01 09:52:29 +00:00
2025-03-10 06:14:20 +00:00
**使用说明**: A 和 B 至少有一个公共点,并且这些公共点位于至少一个边界中。对于点/点输入,关系始终为 FALSE, 因为点没有边界。