10-function.md 40.7 KB
Newer Older
1
---
2 3
sidebar_label: 函数
title: 函数
4
description: TDengine 支持的函数列表
5
toc_max_heading_level: 4
6 7
---

8
## 单行函数
9

10
单行函数为查询结果中的每一行返回一个结果行。
11

12
### 数学函数
13

14
#### ABS
15

16
```sql
G
Ganlin Zhao 已提交
17
ABS(expr)
18
```
19

20
**功能说明**:获得指定字段的绝对值。
21

22
**返回结果类型**:与指定字段的原始数据类型一致。
23

G
gccgdb1234 已提交
24
**适用数据类型**:数值类型。
25

26
**嵌套子查询支持**:适用于内层查询和外层查询。
27

28
**适用于**: 表和超级表。
29

30
**使用说明**:只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
31

32
#### ACOS
33

34
```sql
G
Ganlin Zhao 已提交
35
ACOS(expr)
36 37
```

38
**功能说明**:获得指定字段的反余弦结果。
39

40
**返回结果类型**:DOUBLE。
41

G
gccgdb1234 已提交
42
**适用数据类型**:数值类型。
43

44
**嵌套子查询支持**:适用于内层查询和外层查询。
45

46
**适用于**: 表和超级表。
47

48
**使用说明**:只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
49

50
#### ASIN
51

52
```sql
G
Ganlin Zhao 已提交
53
ASIN(expr)
54 55
```

56
**功能说明**:获得指定字段的反正弦结果。
57

58
**返回结果类型**:DOUBLE。
59

G
gccgdb1234 已提交
60
**适用数据类型**:数值类型。
61

62
**嵌套子查询支持**:适用于内层查询和外层查询。
63

64
**适用于**: 表和超级表。
65

66
**使用说明**:只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
67 68


69
#### ATAN
70

71
```sql
G
Ganlin Zhao 已提交
72
ATAN(expr)
73 74
```

75
**功能说明**:获得指定字段的反正切结果。
76

77
**返回结果类型**:DOUBLE。
78

G
gccgdb1234 已提交
79
**适用数据类型**:数值类型。
80

81
**嵌套子查询支持**:适用于内层查询和外层查询。
82

83
**适用于**: 表和超级表。
84

85
**使用说明**:只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
86

87 88

#### CEIL
89

G
gccgdb1234 已提交
90
```sql
G
Ganlin Zhao 已提交
91
CEIL(expr)
92 93
```

94
**功能说明**:获得指定字段的向上取整数的结果。
95

96
**返回结果类型**:与指定字段的原始数据类型一致。
97

G
gccgdb1234 已提交
98
**适用数据类型**:数值类型。
99

100
**适用于**: 表和超级表。
101

102
**嵌套子查询支持**:适用于内层查询和外层查询。
103

104
**使用说明**: 只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
105

106
#### COS
107

108
```sql
G
Ganlin Zhao 已提交
109
COS(expr)
110 111
```

112
**功能说明**:获得指定字段的余弦结果。
113

114
**返回结果类型**:DOUBLE。
115

G
gccgdb1234 已提交
116
**适用数据类型**:数值类型。
117 118

**嵌套子查询支持**:适用于内层查询和外层查询。
119

120
**适用于**: 表和超级表。
121

122
**使用说明**:只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
123

124
#### FLOOR
125

G
gccgdb1234 已提交
126
```sql
G
Ganlin Zhao 已提交
127
FLOOR(expr)
128 129
```

G
Ganlin Zhao 已提交
130
**功能说明**:获得指定字段的向下取整数的结果。
131
 其他使用说明参见 CEIL 函数描述。
132

133 134 135
#### LOG

```sql
G
Ganlin Zhao 已提交
136
LOG(expr1[, expr2])
137 138
```

G
Ganlin Zhao 已提交
139
**功能说明**:获得 expr1 对于底数 expr2 的对数。如果 expr2 参数省略,则返回指定字段的自然对数值。
140

141
**返回结果类型**:DOUBLE。
142

G
gccgdb1234 已提交
143
**适用数据类型**:数值类型。
144

145
**嵌套子查询支持**:适用于内层查询和外层查询。
146

147
**适用于**: 表和超级表。
148

149
**使用说明**:只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
150 151


152
#### POW
153

154
```sql
G
Ganlin Zhao 已提交
155
POW(expr1, expr2)
156
```
157

G
Ganlin Zhao 已提交
158
**功能说明**:获得 expr1 的指数为 expr2 的幂。
159

160
**返回结果类型**:DOUBLE。
161

G
gccgdb1234 已提交
162
**适用数据类型**:数值类型。
163

164
**嵌套子查询支持**:适用于内层查询和外层查询。
165

166
**适用于**: 表和超级表。
167

168
**使用说明**:只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
169 170


171
#### ROUND
172

G
gccgdb1234 已提交
173
```sql
G
Ganlin Zhao 已提交
174
ROUND(expr)
175 176
```

G
Ganlin Zhao 已提交
177
**功能说明**:获得指定字段的四舍五入的结果。
178
 其他使用说明参见 CEIL 函数描述。
179 180


181
#### SIN
182

183
```sql
G
Ganlin Zhao 已提交
184
SIN(expr)
185
```
186

187
**功能说明**:获得指定字段的正弦结果。
188

189
**返回结果类型**:DOUBLE。
190

G
gccgdb1234 已提交
191
**适用数据类型**:数值类型。
192

193
**嵌套子查询支持**:适用于内层查询和外层查询。
194

195
**适用于**: 表和超级表。
196

197
**使用说明**:只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
198

199
#### SQRT
200

201
```sql
G
Ganlin Zhao 已提交
202
SQRT(expr)
203
```
204

205
**功能说明**:获得指定字段的平方根。
206

207
**返回结果类型**:DOUBLE。
208

G
gccgdb1234 已提交
209
**适用数据类型**:数值类型。
210

211
**嵌套子查询支持**:适用于内层查询和外层查询。
212

213
**适用于**: 表和超级表。
214

215
**使用说明**:只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
G
gccgdb1234 已提交
216

217 218 219
#### TAN

```sql
G
Ganlin Zhao 已提交
220
TAN(expr)
G
gccgdb1234 已提交
221 222
```

223
**功能说明**:获得指定字段的正切结果。
G
gccgdb1234 已提交
224

225
**返回结果类型**:DOUBLE。
G
gccgdb1234 已提交
226

G
gccgdb1234 已提交
227
**适用数据类型**:数值类型。
G
gccgdb1234 已提交
228

229
**嵌套子查询支持**:适用于内层查询和外层查询。
G
gccgdb1234 已提交
230

231
**适用于**: 表和超级表。
G
gccgdb1234 已提交
232

233
**使用说明**:只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
G
gccgdb1234 已提交
234

235
### 字符串函数
236

237
字符串函数的输入参数为字符串类型,返回结果为数值类型或字符串类型。
238

239
#### CHAR_LENGTH
240

G
gccgdb1234 已提交
241
```sql
G
Ganlin Zhao 已提交
242
CHAR_LENGTH(expr)
243 244
```

245
**功能说明**:以字符计数的字符串长度。
246

247
**返回结果类型**:BIGINT。
248

249
**适用数据类型**:VARCHAR, NCHAR。
250

251
**嵌套子查询支持**:适用于内层查询和外层查询。
252

253
**适用于**: 表和超级表。
254

255
#### CONCAT
256

257
```sql
G
Ganlin Zhao 已提交
258
CONCAT(expr1, expr2 [, expr] ... )
259 260
```

261
**功能说明**:字符串连接函数。
262

263
**返回结果类型**:如果所有参数均为 VARCHAR 类型,则结果类型为 VARCHAR。如果参数包含NCHAR类型,则结果类型为NCHAR。如果参数包含NULL值,则输出值为NULL。
264

G
gccgdb1234 已提交
265
**适用数据类型**:VARCHAR, NCHAR。 该函数最小参数个数为2个,最大参数个数为8个。
266

267
**嵌套子查询支持**:适用于内层查询和外层查询。
268

269
**适用于**: 表和超级表。
270 271


272
#### CONCAT_WS
273

G
gccgdb1234 已提交
274
```sql
G
Ganlin Zhao 已提交
275
CONCAT_WS(separator_expr, expr1, expr2 [, expr] ...)
276 277
```

278 279
**功能说明**:带分隔符的字符串连接函数。

280
**返回结果类型**:如果所有参数均为VARCHAR类型,则结果类型为VARCHAR。如果参数包含NCHAR类型,则结果类型为NCHAR。如果参数包含NULL值,则输出值为NULL。
281

G
gccgdb1234 已提交
282
**适用数据类型**:VARCHAR, NCHAR。 该函数最小参数个数为3个,最大参数个数为9个。
283 284 285

**嵌套子查询支持**:适用于内层查询和外层查询。

286
**适用于**: 表和超级表。
287 288 289


#### LENGTH
290

G
gccgdb1234 已提交
291
```sql
G
Ganlin Zhao 已提交
292
LENGTH(expr)
293 294
```

295
**功能说明**:以字节计数的字符串长度。
296

297
**返回结果类型**:BIGINT。
298

G
gccgdb1234 已提交
299
**适用数据类型**:输入参数是 VARCHAR 类型或者 NCHAR 类型的字符串或者列。
300

301
**嵌套子查询支持**:适用于内层查询和外层查询。
302

303
**适用于**: 表和超级表。
304 305


306
#### LOWER
307

G
gccgdb1234 已提交
308
```sql
G
Ganlin Zhao 已提交
309
LOWER(expr)
310 311
```

312
**功能说明**:将字符串参数值转换为全小写字母。
313

314
**返回结果类型**:与输入字段的原始类型相同。
315

316
**适用数据类型**:VARCHAR, NCHAR。
317

318
**嵌套子查询支持**:适用于内层查询和外层查询。
319

320
**适用于**: 表和超级表。
321 322


323
#### LTRIM
324

G
gccgdb1234 已提交
325
```sql
G
Ganlin Zhao 已提交
326
LTRIM(expr)
327 328
```

329
**功能说明**:返回清除左边空格后的字符串。
330

331
**返回结果类型**:与输入字段的原始类型相同。
332

333
**适用数据类型**:VARCHAR, NCHAR。
334

335
**嵌套子查询支持**:适用于内层查询和外层查询。
336

337
**适用于**: 表和超级表。
338 339


340
#### RTRIM
341

G
gccgdb1234 已提交
342
```sql
S
sunpeng 已提交
343
RTRIM(expr)
344 345
```

346
**功能说明**:返回清除右边空格后的字符串。
347

348
**返回结果类型**:与输入字段的原始类型相同。
349

350
**适用数据类型**:VARCHAR, NCHAR。
351

352
**嵌套子查询支持**:适用于内层查询和外层查询。
353

354
**适用于**: 表和超级表。
355 356


357
#### SUBSTR
358

G
gccgdb1234 已提交
359
```sql
G
Ganlin Zhao 已提交
360
SUBSTR(expr, pos [,len])
361 362
```

363
**功能说明**:从源字符串 str 中的指定位置 pos 开始取一个长度为 len 的子串并返回。如果输入参数 len 被忽略,返回的子串包含从 pos 开始的整个字串。
364

365
**返回结果类型**:与输入字段的原始类型相同。
366

367
**适用数据类型**:VARCHAR, NCHAR。输入参数 pos 可以为正数,也可以为负数。如果 pos 是正数,表示开始位置从字符串开头正数计算。如果 pos 为负数,表示开始位置从字符串结尾倒数计算。
368

369
**嵌套子查询支持**:适用于内层查询和外层查询。
370

371
**适用于**: 表和超级表。
372 373


374
#### UPPER
375

G
gccgdb1234 已提交
376
```sql
G
Ganlin Zhao 已提交
377
UPPER(expr)
378 379
```

380
**功能说明**:将字符串参数值转换为全大写字母。
381

382
**返回结果类型**:与输入字段的原始类型相同。
383

384
**适用数据类型**:VARCHAR, NCHAR。
385

386
**嵌套子查询支持**:适用于内层查询和外层查询。
387

388
**适用于**: 表和超级表。
389 390


391
### 转换函数
392

393
转换函数将值从一种数据类型转换为另一种数据类型。
394

395
#### CAST
396

397
```sql
G
Ganlin Zhao 已提交
398
CAST(expr AS type_name)
399 400
```

G
Ganlin Zhao 已提交
401
**功能说明**:数据类型转换函数,返回 expr 转换为 type_name 指定的类型后的结果。只适用于 select 子句中。
402

403
**返回结果类型**:CAST 中指定的类型(type_name)。
404

G
Ganlin Zhao 已提交
405
**适用数据类型**:输入参数 expression 的类型可以是除JSON外的所有类型。
406 407 408 409

**嵌套子查询支持**:适用于内层查询和外层查询。

**适用于**: 表和超级表。
410

411 412 413
**使用说明**

- 对于不能支持的类型转换会直接报错。
G
Ganlin Zhao 已提交
414
- 对于类型支持但某些值无法正确转换的情况,对应的转换后的值以转换函数输出为准。目前可能遇到的几种情况:
415 416
        1)字符串类型转换数值类型时可能出现的无效字符情况,例如"a"可能转为0,但不会报错。
        2)转换到数值类型时,数值大于type_name可表示的范围时,则会溢出,但不会报错。
G
Ganlin Zhao 已提交
417
        3)转换到字符串类型时,如果转换后长度超过type_name中指定的长度,则会截断,但不会报错。
418 419 420 421

#### TO_ISO8601

```sql
G
Ganlin Zhao 已提交
422
TO_ISO8601(expr [, timezone])
423 424
```

G
Ganlin Zhao 已提交
425
**功能说明**:将 UNIX 时间戳转换成为 ISO8601 标准的日期时间格式,并附加时区信息。timezone 参数允许用户为输出结果指定附带任意时区信息。如果 timezone 参数省略,输出结果则附带当前客户端的系统时区信息。
426

G
gccgdb1234 已提交
427
**返回结果数据类型**:VARCHAR 类型。
428

429
**适用数据类型**:INTEGER, TIMESTAMP。
430

431 432 433
**嵌套子查询支持**:适用于内层查询和外层查询。

**适用于**: 表和超级表。
434 435 436

**使用说明**

437
- timezone 参数允许输入的时区格式为: [z/Z, +/-hhmm, +/-hh, +/-hh:mm]。例如,TO_ISO8601(1, "+00:00")。
G
Ganlin Zhao 已提交
438
- 如果输入是表示 UNIX 时间戳的整形,返回格式精度由时间戳的位数决定;
G
Ganlin Zhao 已提交
439
- 如果输入是 TIMESTAMP 类型的列,返回格式的时间戳精度与当前 DATABASE 设置的时间精度一致。
440 441


442
#### TO_JSON
443

444
```sql
G
Ganlin Zhao 已提交
445
TO_JSON(str_literal)
446 447
```

448
**功能说明**: 将字符串常量转换为 JSON 类型。
449

450
**返回结果数据类型**: JSON。
451

452
**适用数据类型**: JSON 字符串,形如 '{ "literal" : literal }'。'{}'表示空值。键必须为字符串字面量,值可以为数值字面量、字符串字面量、布尔字面量或空值字面量。str_literal中不支持转义符。
453

454
**嵌套子查询支持**:适用于内层查询和外层查询。
455

456 457
**适用于**: 表和超级表。

458

459
#### TO_UNIXTIMESTAMP
460

461
```sql
G
Ganlin Zhao 已提交
462 463 464 465 466 467
TO_UNIXTIMESTAMP(expr [, return_timestamp])

return_timestamp: {
    0
  | 1
}
468
```
469

470
**功能说明**:将日期时间格式的字符串转换成为 UNIX 时间戳。
471

G
Ganlin Zhao 已提交
472
**返回结果数据类型**:BIGINT, TIMESTAMP。
473

474
**应用字段**:VARCHAR, NCHAR。
475

476 477 478
**嵌套子查询支持**:适用于内层查询和外层查询。

**适用于**:表和超级表。
479

480
**使用说明**
481

482
- 输入的日期时间字符串须符合 ISO8601/RFC3339 标准,无法转换的字符串格式将返回 NULL。
483
- 返回的时间戳精度与当前 DATABASE 设置的时间精度一致。
G
Ganlin Zhao 已提交
484
- return_timestamp 指定函数返回值是否为时间戳类型,设置为1时返回 TIMESTAMP 类型,设置为0时返回 BIGINT 类型。如不指定缺省返回 BIGINT 类型。
485 486


487
### 时间和日期函数
488

489
时间和日期函数对时间戳类型进行操作。
490

491
所有返回当前时间的函数,如NOW、TODAY和TIMEZONE,在一条SQL语句中不论出现多少次都只会被计算一次。
492

493
#### NOW
494

495
```sql
G
Ganlin Zhao 已提交
496
NOW()
497 498
```

499
**功能说明**:返回客户端当前系统时间。
500

501
**返回结果数据类型**:TIMESTAMP。
502

503
**应用字段**:在 WHERE 或 INSERT 语句中使用时只能作用于 TIMESTAMP 类型的字段。
504

505 506 507
**适用于**:表和超级表。

**嵌套子查询支持**:适用于内层查询和外层查询。
508

509
**使用说明**
510

511 512 513
- 支持时间加减操作,如 NOW() + 1s, 支持的时间单位如下:
        b(纳秒)、u(微秒)、a(毫秒)、s(秒)、m(分)、h(小时)、d(天)、w(周)。
- 返回的时间戳精度与当前 DATABASE 设置的时间精度一致。
514 515


516
#### TIMEDIFF
517

518
```sql
G
Ganlin Zhao 已提交
519
TIMEDIFF(expr1, expr2 [, time_unit])
520 521
```

522
**功能说明**:计算两个时间戳之间的差值,并近似到时间单位 time_unit 指定的精度。
523

G
Ganlin Zhao 已提交
524
**返回结果数据类型**:BIGINT。
525

526
**应用字段**:表示 UNIX 时间戳的 BIGINT, TIMESTAMP 类型,或符合日期时间格式的 VARCHAR, NCHAR 类型。
527

528
**适用于**:表和超级表。
529

530 531
**嵌套子查询支持**:适用于内层查询和外层查询。

532 533
**使用说明**
- 支持的时间单位 time_unit 如下:
534
          1b(纳秒), 1u(微秒),1a(毫秒),1s(秒),1m(分),1h(小时),1d(天), 1w(周)。
535
- 如果时间单位 time_unit 未指定, 返回的时间差值精度与当前 DATABASE 设置的时间精度一致。
G
Ganlin Zhao 已提交
536
- 输入包含不符合时间日期格式的字符串则返回 NULL。
537 538


539
#### TIMETRUNCATE
540

541
```sql
542 543 544 545 546 547
TIMETRUNCATE(expr, time_unit [, ignore_timezone])

ignore_timezone: {
    0
  | 1
}
548
```
549

550
**功能说明**:将时间戳按照指定时间单位 time_unit 进行截断。
551

552
**返回结果数据类型**:TIMESTAMP。
553

554
**应用字段**:表示 UNIX 时间戳的 BIGINT, TIMESTAMP 类型,或符合日期时间格式的 VARCHAR, NCHAR 类型。
555

556
**适用于**:表和超级表。
557

558 559
**使用说明**
- 支持的时间单位 time_unit 如下:
560
          1b(纳秒), 1u(微秒),1a(毫秒),1s(秒),1m(分),1h(小时),1d(天), 1w(周)。
561
- 返回的时间戳精度与当前 DATABASE 设置的时间精度一致。
G
Ganlin Zhao 已提交
562
- 输入包含不符合时间日期格式的字符串则返回 NULL。
563 564 565 566 567
- 当使用 1d 作为时间单位对时间戳进行截断时, 可通过设置 ignore_timezone 参数指定返回结果的显示是否忽略客户端时区的影响。
  例如客户端所配置时区为 UTC+0800, 则 TIMETRUNCATE('2020-01-01 23:00:00', 1d, 0) 返回结果为 '2020-01-01 08:00:00'。
  而使用 TIMETRUNCATE('2020-01-01 23:00:00', 1d, 1) 设置忽略时区时,返回结果为 '2020-01-01 00:00:00'
  ignore_timezone 如果忽略的话,则默认值为 1 。

568 569


570
#### TIMEZONE
571

572
```sql
G
Ganlin Zhao 已提交
573
TIMEZONE()
574
```
575

576
**功能说明**:返回客户端当前时区信息。
577

578
**返回结果数据类型**:VARCHAR。
579

580
**应用字段**:无
581

582
**适用于**:表和超级表。
583 584


585
#### TODAY
586

587
```sql
G
Ganlin Zhao 已提交
588
TODAY()
589 590
```

591
**功能说明**:返回客户端当日零时的系统时间。
592

593
**返回结果数据类型**:TIMESTAMP。
594

595
**应用字段**:在 WHERE 或 INSERT 语句中使用时只能作用于 TIMESTAMP 类型的字段。
596

597
**适用于**:表和超级表。
598

599
**使用说明**
600

601 602 603
- 支持时间加减操作,如 TODAY() + 1s, 支持的时间单位如下:
                b(纳秒),u(微秒),a(毫秒),s(秒),m(分),h(小时),d(天),w(周)。
- 返回的时间戳精度与当前 DATABASE 设置的时间精度一致。
604 605


606
## 聚合函数
607

608
聚合函数为查询结果集的每一个分组返回单个结果行。可以由 GROUP BY 或窗口切分子句指定分组,如果没有,则整个查询结果集视为一个分组。
609

610
TDengine 支持针对数据的聚合查询。提供如下聚合函数。
611

G
Ganlin Zhao 已提交
612 613 614
### APERCENTILE

```sql
G
Ganlin Zhao 已提交
615 616 617 618 619 620
APERCENTILE(expr, p [, algo_type])

algo_type: {
    "default"
  | "t-digest"
}
G
Ganlin Zhao 已提交
621 622 623 624 625 626 627 628 629 630 631
```

**功能说明**:统计表/超级表中指定列的值的近似百分比分位数,与 PERCENTILE 函数相似,但是返回近似结果。

**返回数据类型**: DOUBLE。

**适用数据类型**:数值类型。

**适用于**:表和超级表。

**说明**
G
Ganlin Zhao 已提交
632
- p值范围是[0,100],当为0时等同于MIN,为100时等同于MAX。
G
Ganlin Zhao 已提交
633
- algo_type 取值为 "default" 或 "t-digest"。 输入为 "default" 时函数使用基于直方图算法进行计算。输入为 "t-digest" 时使用t-digest算法计算分位数的近似结果。如果不指定 algo_type 则使用 "default" 算法。
634
- "t-digest"算法的近似结果对于输入数据顺序敏感,对超级表查询时不同的输入排序结果可能会有微小的误差。
G
Ganlin Zhao 已提交
635

636
### AVG
637

G
gccgdb1234 已提交
638
```sql
G
Ganlin Zhao 已提交
639
AVG(expr)
640 641
```

642
**功能说明**:统计指定字段的平均值。
643

644
**返回数据类型**:DOUBLE。
645

646
**适用数据类型**:数值类型。
647

648
**适用于**:表和超级表。
649 650


651
### COUNT
652

G
gccgdb1234 已提交
653
```sql
G
Ganlin Zhao 已提交
654
COUNT({* | expr})
655 656
```

657
**功能说明**:统计指定字段的记录行数。
658

659
**返回数据类型**:BIGINT。
660

661
**适用数据类型**:全部类型字段。
662

663
**适用于**:表和超级表。
664

665
**使用说明**:
666

667
- 可以使用星号(\*)来替代具体的字段,使用星号(\*)返回全部记录数量。
668
- 如果统计字段是具体的列,则返回该列中非 NULL 值的记录数量。
669 670


671
### ELAPSED
672

G
gccgdb1234 已提交
673
```sql
G
Ganlin Zhao 已提交
674
ELAPSED(ts_primary_key [, time_unit])
675 676
```

677
**功能说明**:elapsed函数表达了统计周期内连续的时间长度,和twa函数配合使用可以计算统计曲线下的面积。在通过INTERVAL子句指定窗口的情况下,统计在给定时间范围内的每个窗口内有数据覆盖的时间范围;如果没有INTERVAL子句,则返回整个给定时间范围内的有数据覆盖的时间范围。注意,ELAPSED返回的并不是时间范围的绝对值,而是绝对值除以time_unit所得到的单位个数。
678

679
**返回结果类型**:DOUBLE。
680

681
**适用数据类型**:TIMESTAMP。
682

683
**适用于**: 表,超级表,嵌套查询的外层查询
684

685
**说明**
G
Ganlin Zhao 已提交
686
- ts_primary_key参数只能是表的第一列,即 TIMESTAMP 类型的主键列。
687 688
- 按time_unit参数指定的时间单位返回,最小是数据库的时间分辨率。time_unit 参数未指定时,以数据库的时间分辨率为时间单位。支持的时间单位 time_unit 如下:
          1b(纳秒), 1u(微秒),1a(毫秒),1s(秒),1m(分),1h(小时),1d(天), 1w(周)。
689 690 691 692 693 694
- 可以和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等函数混合使用。
695

G
Ganlin Zhao 已提交
696

697
### LEASTSQUARES
698

G
gccgdb1234 已提交
699
```sql
G
Ganlin Zhao 已提交
700
LEASTSQUARES(expr, start_val, step_val)
701 702
```

703
**功能说明**:统计表中某列的值是主键(时间戳)的拟合直线方程。start_val 是自变量初始值,step_val 是自变量的步长值。
704

705
**返回数据类型**:字符串表达式(斜率, 截距)。
706

G
Ganlin Zhao 已提交
707
**适用数据类型**:expr 必须是数值类型。
708

709
**适用于**:表。
710 711


712
### SPREAD
713

G
gccgdb1234 已提交
714
```sql
G
Ganlin Zhao 已提交
715
SPREAD(expr)
716 717
```

718
**功能说明**:统计表中某列的最大值和最小值之差。
719

720
**返回数据类型**:DOUBLE。
721

722
**适用数据类型**:INTEGER, TIMESTAMP。
723

724
**适用于**:表和超级表。
725 726


727
### STDDEV
728

G
gccgdb1234 已提交
729
```sql
G
Ganlin Zhao 已提交
730
STDDEV(expr)
731 732
```

733
**功能说明**:统计表中某列的均方差。
734

735
**返回数据类型**:DOUBLE。
736

737
**适用数据类型**:数值类型。
738

739
**适用于**:表和超级表。
740 741


742
### SUM
743

G
gccgdb1234 已提交
744
```sql
G
Ganlin Zhao 已提交
745
SUM(expr)
746 747
```

748
**功能说明**:统计表/超级表中某列的和。
749

750
**返回数据类型**:DOUBLE, BIGINT。
751

752
**适用数据类型**:数值类型。
753

754
**适用于**:表和超级表。
755 756


757
### HYPERLOGLOG
758

G
gccgdb1234 已提交
759
```sql
G
Ganlin Zhao 已提交
760
HYPERLOGLOG(expr)
761 762
```

763
**功能说明**
764
  - 采用 hyperloglog 算法,返回某列的基数。该算法在数据量很大的情况下,可以明显降低内存的占用,求出来的基数是个估算值,标准误差(标准误差是多次实验,每次的平均数的标准差,不是与真实结果的误差)为 0.81%。
765
  - 在数据量较少的时候该算法不是很准确,可以使用 select count(data) from (select unique(col) as data from table) 的方法。
766

767
**返回结果类型**:INTEGER。
768

769
**适用数据类型**:任何类型。
770

771
**适用于**:表和超级表。
772 773


774
### HISTOGRAM
775

G
gccgdb1234 已提交
776
```sql
G
Ganlin Zhao 已提交
777
HISTOGRAM(exprbin_type, bin_description, normalized)
778 779
```

780
**功能说明**:统计数据按照用户指定区间的分布。
781

782
**返回结果类型**:如归一化参数 normalized 设置为 1,返回结果为 DOUBLE 类型,否则为 BIGINT 类型。
783

784
**适用数据类型**:数值型字段。
785

786
**适用于**: 表和超级表。
787

788
**详细说明**
G
Ganlin Zhao 已提交
789
- bin_type 用户指定的分桶类型, 有效输入类型为"user_input“, ”linear_bin", "log_bin"。
G
Ganlin Zhao 已提交
790 791
- bin_description 描述如何生成分桶区间,针对三种桶类型,分别为以下描述格式(均为 JSON 格式字符串):
    - "user_input": "[1, 3, 5, 7]"
792
       用户指定 bin 的具体数值。
G
Ganlin Zhao 已提交
793

794
    - "linear_bin": "{"start": 0.0, "width": 5.0, "count": 5, "infinity": true}"
G
Ganlin Zhao 已提交
795
       "start" 表示数据起始点,"width" 表示每次 bin 偏移量, "count" 为 bin 的总数,"infinity" 表示是否添加(-inf, inf)作为区间起点和终点,
796
       生成区间为[-inf, 0.0, 5.0, 10.0, 15.0, 20.0, +inf]。
G
Ganlin Zhao 已提交
797

798
    - "log_bin": "{"start":1.0, "factor": 2.0, "count": 5, "infinity": true}"
G
Ganlin Zhao 已提交
799
       "start" 表示数据起始点,"factor" 表示按指数递增的因子,"count" 为 bin 的总数,"infinity" 表示是否添加(-inf, inf)作为区间起点和终点,
800
       生成区间为[-inf, 1.0, 2.0, 4.0, 8.0, 16.0, +inf]。
G
Ganlin Zhao 已提交
801
- normalized 是否将返回结果归一化到 0~1 之间 。有效输入为 0 和 1。
802 803


G
Ganlin Zhao 已提交
804
### PERCENTILE
805

G
gccgdb1234 已提交
806
```sql
G
Ganlin Zhao 已提交
807
PERCENTILE(expr, p [, p1] ... )
808 809
```

G
Ganlin Zhao 已提交
810
**功能说明**:统计表中某列的值百分比分位数。
811

G
Ganlin Zhao 已提交
812
**返回数据类型**: 该函数最小参数个数为 2 个,最大参数个数为 11 个。可以最多同时返回 10 个百分比分位数。当参数个数为 2 时, 返回一个分位数, 类型为DOUBLE,当参数个数大于 2 时,返回类型为VARCHAR, 格式为包含多个返回值的JSON数组。
813

G
Ganlin Zhao 已提交
814
**应用字段**:数值类型。
815

G
Ganlin Zhao 已提交
816 817
**适用于**:表。

G
Ganlin Zhao 已提交
818 819 820 821 822
**使用说明**

- *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。
823

G
Ganlin Zhao 已提交
824 825 826 827

## 选择函数

选择函数根据语义在查询结果集中选择一行或多行结果返回。用户可以同时指定输出 ts 列或其他列(包括 tbname 和标签列),这样就可以方便地知道被选出的值是源于哪个数据行的。
828

829
### BOTTOM
830

G
gccgdb1234 已提交
831
```sql
G
Ganlin Zhao 已提交
832
BOTTOM(expr, k)
833
```
834

835
**功能说明**:统计表/超级表中某列的值最小 _k_ 个非 NULL 值。如果多条数据取值一样,全部取用又会超出 k 条限制时,系统会从相同值中随机选取符合要求的数量返回。
836

837
**返回数据类型**:同应用的字段。
838

839
**适用数据类型**:数值类型。
840

841
**适用于**:表和超级表。
842

843
**使用说明**:
844

845 846 847
- *k*值取值范围 1≤*k*≤100;
- 系统同时返回该记录关联的时间戳列;
- 限制:BOTTOM 函数不支持 FILL 子句。
848

849 850
### FIRST

G
gccgdb1234 已提交
851
```sql
G
Ganlin Zhao 已提交
852
FIRST(expr)
853 854 855 856 857 858 859 860 861 862 863 864 865 866 867
```

**功能说明**:统计表/超级表中某列的值最先写入的非 NULL 值。

**返回数据类型**:同应用的字段。

**适用数据类型**:所有字段。

**适用于**:表和超级表。

**使用说明**:

- 如果要返回各个列的首个(时间戳最小)非 NULL 值,可以使用 FIRST(\*);
- 如果结果集中的某列全部为 NULL 值,则该列的返回结果也是 NULL;
- 如果结果集中所有列全部为 NULL 值,则不返回结果。
868

869
### INTERP
870

G
gccgdb1234 已提交
871
```sql
G
Ganlin Zhao 已提交
872 873 874 875 876 877
INTERP(expr [, ignore_null_values])

ignore_null_values: {
    0
  | 1
}
878 879
```

G
Ganlin Zhao 已提交
880
**功能说明**:返回指定时间截面指定列的记录值或插值。ignore_null_values 参数的值可以是 0 或 1,为 1 时表示忽略 NULL 值, 缺省值为0。
881

882
**返回数据类型**:同字段类型。
883

884
**适用数据类型**:数值类型。
885

G
Ganlin Zhao 已提交
886
**适用于**:表和超级表。
887

888
**使用说明**
889

890 891
- INTERP 用于在指定时间断面获取指定列的记录值,如果该时间断面不存在符合条件的行数据,那么会根据 FILL 参数的设定进行插值。
- INTERP 的输入数据为指定列的数据,可以通过条件语句(where 子句)来对原始列数据进行过滤,如果没有指定过滤条件则输入为全部数据。
G
Ganlin Zhao 已提交
892
- INTERP 需要同时与 RANGE,EVERY 和 FILL 关键字一起使用。
G
Ganlin Zhao 已提交
893
- INTERP 的输出时间范围根据 RANGE(timestamp1, timestamp2)字段来指定,需满足 timestamp1 <= timestamp2。其中 timestamp1 为输出时间范围的起始值,即如果 timestamp1 时刻符合插值条件则 timestamp1 为输出的第一条记录,timestamp2 为输出时间范围的结束值,即输出的最后一条记录的 timestamp 不能大于 timestamp2。
G
Ganlin Zhao 已提交
894
- INTERP 根据 EVERY(time_unit) 字段来确定输出时间范围内的结果条数,即从 timestamp1 开始每隔固定长度的时间(time_unit 值)进行插值,time_unit 可取值时间单位:1a(毫秒),1s(秒),1m(分),1h(小时),1d(天),1w(周)。例如 EVERY(500a) 将对于指定数据每500毫秒间隔进行一次插值.
895
- INTERP 根据 FILL 字段来决定在每个符合输出条件的时刻如何进行插值。关于 FILL 子句如何使用请参考 [FILL 子句](../distinguished/#fill-子句)
G
Ganlin Zhao 已提交
896
- INTERP 可以在 RANGE 字段中只指定唯一的时间戳对单个时间点进行插值,在这种情况下,EVERY 字段可以省略。例如:SELECT INTERP(col) FROM tb RANGE('2023-01-01 00:00:00') FILL(linear).
G
Ganlin Zhao 已提交
897
- INTERP 作用于超级表时, 会将该超级表下的所有子表数据按照主键列排序后进行插值计算,也可以搭配 PARTITION BY tbname 使用,将结果强制规约到单个时间线。
898 899
- INTERP 可以与伪列 _irowts 一起使用,返回插值点所对应的时间戳(3.0.2.0版本以后支持)。
- INTERP 可以与伪列 _isfilled 一起使用,显示返回结果是否为原始记录或插值算法产生的数据(3.0.3.0版本以后支持)。
900 901

### LAST
902

G
gccgdb1234 已提交
903
```sql
G
Ganlin Zhao 已提交
904
LAST(expr)
905 906
```

907
**功能说明**:统计表/超级表中某列的值最后写入的非 NULL 值。
908

909
**返回数据类型**:同应用的字段。
910

911
**适用数据类型**:所有字段。
912

913 914 915 916 917 918 919
**适用于**:表和超级表。

**使用说明**:

- 如果要返回各个列的最后(时间戳最大)一个非 NULL 值,可以使用 LAST(\*);
- 如果结果集中的某列全部为 NULL 值,则该列的返回结果也是 NULL;如果结果集中所有列全部为 NULL 值,则不返回结果。
- 在用于超级表时,时间戳完全一样且同为最大的数据行可能有多个,那么会从中随机返回一条,而并不保证多次运行所挑选的数据行必然一致。
920 921


922
### LAST_ROW
923

G
gccgdb1234 已提交
924
```sql
G
Ganlin Zhao 已提交
925
LAST_ROW(expr)
926 927
```

928
**功能说明**:返回表/超级表的最后一条记录。
929

930
**返回数据类型**:同应用的字段。
931

932
**适用数据类型**:所有字段。
933

934 935 936
**适用于**:表和超级表。

**使用说明**
937

938 939
- 在用于超级表时,时间戳完全一样且同为最大的数据行可能有多个,那么会从中随机返回一条,而并不保证多次运行所挑选的数据行必然一致。
- 不能与 INTERVAL 一起使用。
940

941
### MAX
942

G
gccgdb1234 已提交
943
```sql
G
Ganlin Zhao 已提交
944
MAX(expr)
945 946
```

947
**功能说明**:统计表/超级表中某列的值最大值。
948

949
**返回数据类型**:同应用的字段。
950

G
Ganlin Zhao 已提交
951
**适用数据类型**:数值类型。
952

953
**适用于**:表和超级表。
954 955


956
### MIN
957

G
gccgdb1234 已提交
958
```sql
G
Ganlin Zhao 已提交
959
MIN(expr)
960 961
```

962
**功能说明**:统计表/超级表中某列的值最小值。
963

964
**返回数据类型**:同应用的字段。
965

G
Ganlin Zhao 已提交
966
**适用数据类型**:数值类型。
967

968
**适用于**:表和超级表。
969 970


G
Ganlin Zhao 已提交
971
### MODE
972

G
gccgdb1234 已提交
973
```sql
G
Ganlin Zhao 已提交
974
MODE(expr)
975 976
```

G
Ganlin Zhao 已提交
977
**功能说明**:返回出现频率最高的值,若存在多个频率相同的最高值,则随机输出其中某个值。
978

G
Ganlin Zhao 已提交
979
**返回数据类型**:与输入数据类型一致。
980

G
Ganlin Zhao 已提交
981
**适用数据类型**:全部类型字段。
982

G
Ganlin Zhao 已提交
983
**适用于**:表和超级表。
984

G
Ganlin Zhao 已提交
985 986 987 988

### SAMPLE

```sql
G
Ganlin Zhao 已提交
989
SAMPLE(expr, k)
G
Ganlin Zhao 已提交
990 991
```

G
Ganlin Zhao 已提交
992
**功能说明**: 获取数据的 k 个采样值。参数 k 的合法输入范围是 1≤ k ≤ 1000。
G
Ganlin Zhao 已提交
993

G
Ganlin Zhao 已提交
994
**返回结果类型**: 同原始数据类型。
G
Ganlin Zhao 已提交
995

G
Ganlin Zhao 已提交
996
**适用数据类型**: 全部类型字段。
G
Ganlin Zhao 已提交
997

G
Ganlin Zhao 已提交
998
**嵌套子查询支持**: 适用于内层查询和外层查询。
G
Ganlin Zhao 已提交
999

G
Ganlin Zhao 已提交
1000
**适用于**:表和超级表。
G
Ganlin Zhao 已提交
1001

1002

1003
### TAIL
1004

G
gccgdb1234 已提交
1005
```sql
G
Ganlin Zhao 已提交
1006
TAIL(expr, k [, offset_rows])
1007 1008
```

1009
**功能说明**:返回跳过最后 offset_val 个,然后取连续 k 个记录,不忽略 NULL 值。offset_val 可以不输入。此时返回最后的 k 个记录。当有 offset_val 输入的情况下,该函数功能等效于 `order by ts desc LIMIT k OFFSET offset_val`
1010

1011
**参数范围**:k: [1,100] offset_val: [0,100]。
1012

1013
**返回数据类型**:同应用的字段。
1014

1015
**适用数据类型**:适合于除时间主键列外的任何类型。
1016

1017
**适用于**:表、超级表。
1018

1019 1020

### TOP
1021

G
gccgdb1234 已提交
1022
```sql
G
Ganlin Zhao 已提交
1023
TOP(expr, k)
1024 1025
```

1026
**功能说明**: 统计表/超级表中某列的值最大 _k_ 个非 NULL 值。如果多条数据取值一样,全部取用又会超出 k 条限制时,系统会从相同值中随机选取符合要求的数量返回。
1027

1028
**返回数据类型**:同应用的字段。
1029

1030
**适用数据类型**:数值类型。
1031

1032
**适用于**:表和超级表。
1033

1034
**使用说明**:
1035

1036 1037 1038
- *k*值取值范围 1≤*k*≤100;
- 系统同时返回该记录关联的时间戳列;
- 限制:TOP 函数不支持 FILL 子句。
1039

1040
### UNIQUE
1041

G
gccgdb1234 已提交
1042
```sql
G
Ganlin Zhao 已提交
1043
UNIQUE(expr)
1044
```
1045

G
Ganlin Zhao 已提交
1046
**功能说明**:返回该列数据首次出现的值。该函数功能与 distinct 相似。
1047

1048
**返回数据类型**:同应用的字段。
1049

G
Ganlin Zhao 已提交
1050
**适用数据类型**:全部类型字段。
1051

1052
**适用于**: 表和超级表。
1053 1054


1055
## 时序数据特有函数
1056

1057
时序数据特有函数是 TDengine 为了满足时序数据的查询场景而量身定做出来的。在通用数据库中,实现类似功能通常需要复杂的查询语法,且效率很低。TDengine 以函数的方式内置了这些功能,最大程度的减轻了用户的使用成本。
1058

1059
### CSUM
1060

1061
```sql
G
Ganlin Zhao 已提交
1062
CSUM(expr)
1063
```
1064

1065
**功能说明**:累加和(Cumulative sum),输出行与输入行数相同。
1066

G
Ganlin Zhao 已提交
1067
**返回结果类型**: 输入列如果是整数类型返回值为长整型 (int64_t),浮点数返回值为双精度浮点数(Double)。无符号整数类型返回值为无符号长整型(uint64_t)。
1068

G
gccgdb1234 已提交
1069
**适用数据类型**:数值类型。
1070

1071
**嵌套子查询支持**: 适用于内层查询和外层查询。
1072

1073
**适用于**:表和超级表。
1074

G
Ganlin Zhao 已提交
1075 1076
**使用说明**

G
Ganlin Zhao 已提交
1077
- 不支持 +、-、*、/ 运算,如 csum(col1) + csum(col2)。
G
Ganlin Zhao 已提交
1078
- 只能与聚合(Aggregation)函数一起使用。 该函数可以应用在普通表和超级表上。
1079 1080


1081
### DERIVATIVE
1082

G
gccgdb1234 已提交
1083
```sql
G
Ganlin Zhao 已提交
1084
DERIVATIVE(expr, time_interval, ignore_negative)
G
Ganlin Zhao 已提交
1085 1086 1087 1088 1089

ignore_negative: {
    0
  | 1
}
1090 1091
```

1092
**功能说明**:统计表中某列数值的单位变化率。其中单位时间区间的长度可以通过 time_interval 参数指定,最小可以是 1 秒(1s);ignore_negative 参数的值可以是 0 或 1,为 1 时表示忽略负值。
1093

1094
**返回数据类型**:DOUBLE。
1095

1096
**适用数据类型**:数值类型。
1097

1098
**适用于**:表和超级表。
1099

G
Ganlin Zhao 已提交
1100 1101
**使用说明**:

G
Ganlin Zhao 已提交
1102
- 可以与选择相关联的列一起使用。 例如: select \_rowts, DERIVATIVE() from。
1103

1104
### DIFF
1105

G
gccgdb1234 已提交
1106
```sql
G
Ganlin Zhao 已提交
1107
DIFF(expr [, ignore_negative])
1108

G
Ganlin Zhao 已提交
1109 1110 1111 1112
ignore_negative: {
    0
  | 1
}
G
gccgdb1234 已提交
1113
```
1114

1115
**功能说明**:统计表中某列的值与前一行对应值的差。 ignore_negative 取值为 0|1 , 可以不填,默认值为 0. 不忽略负值。ignore_negative 为 1 时表示忽略负数。
1116

1117
**返回数据类型**:同应用字段。
1118

1119
**适用数据类型**:数值类型。
1120

1121
**适用于**:表和超级表。
1122

G
Ganlin Zhao 已提交
1123
**使用说明**:
G
Ganlin Zhao 已提交
1124

G
Ganlin Zhao 已提交
1125 1126
- 输出结果行数是范围内总行数减一,第一行没有结果输出。
- 可以与选择相关联的列一起使用。 例如: select \_rowts, DIFF() from。
1127 1128


1129
### IRATE
1130

G
gccgdb1234 已提交
1131
```sql
G
Ganlin Zhao 已提交
1132
IRATE(expr)
1133 1134
```

1135
**功能说明**:计算瞬时增长率。使用时间区间中最后两个样本数据来计算瞬时增长速率;如果这两个值呈递减关系,那么只取最后一个数用于计算,而不是使用二者差值。
1136

1137
**返回数据类型**:DOUBLE。
1138

1139
**适用数据类型**:数值类型。
1140

1141 1142
**适用于**:表和超级表。

1143

1144
### MAVG
1145

1146
```sql
G
Ganlin Zhao 已提交
1147
MAVG(expr, k)
1148
```
1149

G
Ganlin Zhao 已提交
1150
**功能说明**: 计算连续 k 个值的移动平均数(moving average)。如果输入行数小于 k,则无结果输出。参数 k 的合法输入范围是 1≤ k ≤ 1000。
1151

G
Ganlin Zhao 已提交
1152
**返回结果类型**: DOUBLE。
1153

G
Ganlin Zhao 已提交
1154
**适用数据类型**: 数值类型。
1155

G
Ganlin Zhao 已提交
1156
**嵌套子查询支持**: 适用于内层查询和外层查询。
1157

G
Ganlin Zhao 已提交
1158
**适用于**:表和超级表。
1159

G
Ganlin Zhao 已提交
1160 1161 1162
**使用说明**

- 不支持 +、-、*、/ 运算,如 mavg(col1, k1) + mavg(col2, k1);
G
Ganlin Zhao 已提交
1163
- 只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用;
1164 1165


1166
### STATECOUNT
1167

G
gccgdb1234 已提交
1168
```sql
G
Ganlin Zhao 已提交
1169
STATECOUNT(expr, oper, val)
1170 1171
```

1172
**功能说明**:返回满足某个条件的连续记录的个数,结果作为新的一列追加在每行后面。条件根据参数计算,如果条件为 true 则加 1,条件为 false 则重置为-1,如果数据为 NULL,跳过该条数据。
1173

1174
**参数范围**
1175

1176
- oper : "LT" (小于)、"GT"(大于)、"LE"(小于等于)、"GE"(大于等于)、"NE"(不等于)、"EQ"(等于),不区分大小写。
1177
- val : 数值型
1178

1179
**返回结果类型**:INTEGER。
1180

G
gccgdb1234 已提交
1181
**适用数据类型**:数值类型。
1182

1183
**嵌套子查询支持**:不支持应用在子查询上。
1184

1185
**适用于**:表和超级表。
1186

1187
**使用说明**
1188

1189
- 不能和窗口操作一起使用,例如 interval/state_window/session_window。
1190

1191 1192

### STATEDURATION
1193 1194

```sql
G
Ganlin Zhao 已提交
1195
STATEDURATION(expr, oper, val, unit)
1196 1197
```

1198
**功能说明**:返回满足某个条件的连续记录的时间长度,结果作为新的一列追加在每行后面。条件根据参数计算,如果条件为 true 则加上两个记录之间的时间长度(第一个满足条件的记录时间长度记为 0),条件为 false 则重置为-1,如果数据为 NULL,跳过该条数据。
1199

1200
**参数范围**
1201

W
wade zhang 已提交
1202
- oper : `'LT'` (小于)、`'GT'`(大于)、`'LE'`(小于等于)、`'GE'`(大于等于)、`'NE'`(不等于)、`'EQ'`(等于),不区分大小写,但需要用`''`包括。
1203
- val : 数值型
G
Ganlin Zhao 已提交
1204
- unit : 时间长度的单位,可取值时间单位: 1b(纳秒), 1u(微秒),1a(毫秒),1s(秒),1m(分),1h(小时),1d(天), 1w(周)。如果省略,默认为当前数据库精度。
1205

1206
**返回结果类型**:INTEGER。
1207

G
gccgdb1234 已提交
1208
**适用数据类型**:数值类型。
1209

1210
**嵌套子查询支持**:不支持应用在子查询上。
1211

1212
**适用于**:表和超级表。
1213

1214
**使用说明**
1215

1216
- 不能和窗口操作一起使用,例如 interval/state_window/session_window。
1217 1218


1219 1220
### TWA

G
gccgdb1234 已提交
1221
```sql
G
Ganlin Zhao 已提交
1222
TWA(expr)
1223 1224
```

1225
**功能说明**:时间加权平均函数。统计表中某列在一段时间内的时间加权平均。
1226

1227
**返回数据类型**:DOUBLE。
1228

1229
**适用数据类型**:数值类型。
1230

1231
**适用于**:表和超级表。
1232 1233


1234
## 系统信息函数
1235

1236
### DATABASE
1237

G
gccgdb1234 已提交
1238
```sql
1239
SELECT DATABASE();
1240 1241
```

1242
**说明**:返回当前登录的数据库。如果登录的时候没有指定默认数据库,且没有使用USE命令切换数据库,则返回NULL。
1243 1244


1245
### CLIENT_VERSION
1246

G
gccgdb1234 已提交
1247
```sql
1248 1249
SELECT CLIENT_VERSION();
```
1250

1251
**说明**:返回客户端版本。
1252

1253
### SERVER_VERSION
1254

G
gccgdb1234 已提交
1255
```sql
1256 1257
SELECT SERVER_VERSION();
```
1258

1259
**说明**:返回服务端版本。
Y
Yu Chen 已提交
1260

1261
### SERVER_STATUS
1262

G
gccgdb1234 已提交
1263
```sql
1264
SELECT SERVER_STATUS();
1265 1266
```

W
wade zhang 已提交
1267
**说明**:检测服务端是否所有 dnode 都在线,如果是则返回成功,否则返回无法建立连接的错误。
1268

1269 1270 1271 1272 1273 1274 1275 1276
### CURRENT_USER

```sql
SELECT CURRENT_USER();
```

**说明**:获取当前用户。

1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412

## Geometry 函数

### Geometry 输入函数:

#### ST_GeomFromText

```sql
ST_GeomFromText(VARCHAR WKT expr)
```

**功能说明**:根据 Well-Known Text (WKT) 表示从指定的几何值创建几何数据。

**返回值类型**:GEOMETRY

**适用数据类型**:VARCHAR

**适用表类型**:标准表和超表

**使用说明**:输入可以是 WKT 字符串之一,例如点(POINT)、线串(LINESTRING)、多边形(POLYGON)、多点集(MULTIPOINT)、多线串(MULTILINESTRING)、多多边形(MULTIPOLYGON)、几何集合(GEOMETRYCOLLECTION)。输出是以二进制字符串形式定义的 GEOMETRY 数据类型。

### Geometry 输出函数:

#### ST_AsText

```sql
ST_AsText(GEOMETRY geom)
```

**功能说明**:从几何数据中返回指定的 Well-Known Text (WKT) 表示。

**返回值类型**:VARCHAR

**适用数据类型**:GEOMETRY

**适用表类型**:标准表和超表

**使用说明**:输出可以是 WKT 字符串之一,例如点(POINT)、线串(LINESTRING)、多边形(POLYGON)、多点集(MULTIPOINT)、多线串(MULTILINESTRING)、多多边形(MULTIPOLYGON)、几何集合(GEOMETRYCOLLECTION)。

### Geometry 关系函数:

#### ST_Intersects

```sql
ST_Intersects(GEOMETRY geomA, GEOMETRY geomB)
```

##功能说明**:比较两个几何对象,并在它们相交时返回 true。

**返回值类型**:BOOL

**适用数据类型**:GEOMETRY,GEOMETRY

**适用表类型**:标准表和超表

**使用说明**:如果两个几何对象有任何一个共享点,则它们相交。

#### ST_Equals

```sql
ST_Equals(GEOMETRY geomA, GEOMETRY geomB)
```

**功能说明**:如果给定的几何对象是"空间相等"的,则返回 TRUE。

**返回值类型**:BOOL

**适用数据类型**:GEOMETRY,GEOMETRY

**适用表类型**:标准表和超表

**使用说明**:"空间相等"意味着 ST_Contains(A,B) = true 和 ST_Contains(B,A) = true,并且点的顺序可能不同,但表示相同的几何结构。

#### ST_Touches

```sql
ST_Touches(GEOMETRY geomA, GEOMETRY geomB)
```

**功能说明**:如果 A 和 B 相交,但它们的内部不相交,则返回 TRUE。

**返回值类型**:BOOL

**适用数据类型**:GEOMETRY,GEOMETRY

**适用表类型**:标准表和超表

**使用说明**:A 和 B 至少有一个公共点,并且这些公共点位于至少一个边界中。对于点/点输入,关系始终为 FALSE,因为点没有边界。

#### ST_Covers

```sql
ST_Covers(GEOMETRY geomA, GEOMETRY geomB)
```

**功能说明**:如果 B 中的每个点都位于几何形状 A 内部(与内部或边界相交),则返回 TRUE。

**返回值类型**:BOOL

**适用数据类型**:GEOMETRY,GEOMETRY

**适用表类型**:标准表和超表

**使用说明**:A 包含 B 意味着 B 中的没有点位于 A 的外部(在外部)。

#### ST_Contains

```sql
ST_Contains(GEOMETRY geomA, GEOMETRY geomB)
```

**功能说明**:如果 A 包含 B,描述:如果几何形状 A 包含几何形状 B,则返回 TRUE。

**返回值类型**:BOOL

**适用数据类型**:GEOMETRY,GEOMETRY

**适用表类型**:标准表和超表

**使用说明**:A 包含 B 当且仅当 B 的所有点位于 A 的内部(即位于内部或边界上)(或等效地,B 的没有点位于 A 的外部),并且 A 和 B 的内部至少有一个公共点。

#### ST_ContainsProperly

```sql
ST_ContainsProperly(GEOMETRY geomA, GEOMETRY geomB)
```

**功能说明**:如果 B 的每个点都位于 A 内部,则返回 TRUE。

**返回值类型**:BOOL

**适用数据类型**:GEOMETRY,GEOMETRY

**适用表类型**:标准表和超表

**使用说明**:B 的没有点位于 A 的边界或外部。