10-function.md 39.4 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
gccgdb1234 已提交
17
SELECT ABS(field_name) FROM { tb_name | stb_name } [WHERE clause]
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
gccgdb1234 已提交
35
SELECT ACOS(field_name) FROM { tb_name | stb_name } [WHERE clause]
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
gccgdb1234 已提交
53
SELECT ASIN(field_name) FROM { tb_name | stb_name } [WHERE clause]
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
gccgdb1234 已提交
72
SELECT ATAN(field_name) FROM { tb_name | stb_name } [WHERE clause]
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
91
SELECT CEIL(field_name) FROM { tb_name | stb_name } [WHERE clause];
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
gccgdb1234 已提交
109
SELECT COS(field_name) FROM { tb_name | stb_name } [WHERE clause]
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
127
SELECT FLOOR(field_name) FROM { tb_name | stb_name } [WHERE clause];
128 129
```

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

133 134 135
#### LOG

```sql
136
SELECT LOG(field_name[, base]) FROM { tb_name | stb_name } [WHERE clause]
137 138
```

139
**功能说明**:获得指定字段对于底数 base 的对数。如果 base 参数省略,则返回指定字段的自然对数值。
140

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

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

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

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

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


152
#### POW
153

154
```sql
G
gccgdb1234 已提交
155
SELECT POW(field_name, power) FROM { tb_name | stb_name } [WHERE clause]
156
```
157

158
**功能说明**:获得指定字段的指数为 power 的幂。
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
174
SELECT ROUND(field_name) FROM { tb_name | stb_name } [WHERE clause];
175 176
```

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


181
#### SIN
182

183
```sql
G
gccgdb1234 已提交
184
SELECT SIN(field_name) FROM { tb_name | stb_name } [WHERE clause]
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
gccgdb1234 已提交
202
SELECT SQRT(field_name) FROM { tb_name | stb_name } [WHERE clause]
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
gccgdb1234 已提交
220
SELECT TAN(field_name) FROM { tb_name | stb_name } [WHERE clause]
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 242
```sql
SELECT CHAR_LENGTH(str|column) FROM { tb_name | stb_name } [WHERE clause]
243 244
```

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

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

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

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

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

255
#### CONCAT
256

257
```sql
G
gccgdb1234 已提交
258
SELECT CONCAT(str1|column1, str2|column2, ...) FROM { tb_name | stb_name } [WHERE clause]
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 275
```sql
SELECT CONCAT_WS(separator, str1|column1, str2|column2, ...) FROM { tb_name | stb_name } [WHERE clause]
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 292
```sql
SELECT LENGTH(str|column) FROM { tb_name | stb_name } [WHERE clause]
293 294
```

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

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

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

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

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


306
#### LOWER
307

G
gccgdb1234 已提交
308 309
```sql
SELECT LOWER(str|column) FROM { tb_name | stb_name } [WHERE clause]
310 311
```

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

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

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

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

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


323
#### LTRIM
324

G
gccgdb1234 已提交
325 326
```sql
SELECT LTRIM(str|column) FROM { tb_name | stb_name } [WHERE clause]
327 328
```

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

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

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

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

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


340
#### RTRIM
341

G
gccgdb1234 已提交
342 343
```sql
SELECT LTRIM(str|column) FROM { tb_name | stb_name } [WHERE clause]
344 345
```

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

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

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

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

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


357
#### SUBSTR
358

G
gccgdb1234 已提交
359 360
```sql
SELECT SUBSTR(str,pos[,len]) FROM { tb_name | stb_name } [WHERE clause]
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 377
```sql
SELECT UPPER(str|column) FROM { tb_name | stb_name } [WHERE clause]
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
gccgdb1234 已提交
398
SELECT CAST(expression AS type_name) FROM { tb_name | stb_name } [WHERE clause]
399 400
```

401
**功能说明**:数据类型转换函数,返回 expression 转换为 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
422
SELECT TO_ISO8601(ts[, timezone]) FROM { tb_name | stb_name } [WHERE clause];
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 445
```sql
SELECT TO_JSON(str_literal) FROM { tb_name | stb_name } [WHERE clause];
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
462
SELECT TO_UNIXTIMESTAMP(datetime_string) FROM { tb_name | stb_name } [WHERE clause];
463
```
464

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

467
**返回结果数据类型**:BIGINT。
468

469
**应用字段**:VARCHAR, NCHAR。
470

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

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

475
**使用说明**
476

477
- 输入的日期时间字符串须符合 ISO8601/RFC3339 标准,无法转换的字符串格式将返回 NULL。
478
- 返回的时间戳精度与当前 DATABASE 设置的时间精度一致。
479 480


481
### 时间和日期函数
482

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

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

487
#### NOW
488

489 490 491 492
```sql
SELECT NOW() FROM { tb_name | stb_name } [WHERE clause];
SELECT select_expr FROM { tb_name | stb_name } WHERE ts_col cond_operatior NOW();
INSERT INTO tb_name VALUES (NOW(), ...);
493 494
```

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

497
**返回结果数据类型**:TIMESTAMP。
498

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

501 502 503
**适用于**:表和超级表。

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

505
**使用说明**
506

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


512
#### TIMEDIFF
513

514
```sql
515
SELECT TIMEDIFF(ts | datetime_string1, ts | datetime_string2 [, time_unit]) FROM { tb_name | stb_name } [WHERE clause];
516 517
```

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

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

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

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

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

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


535
#### TIMETRUNCATE
536

537
```sql
538
SELECT TIMETRUNCATE(ts | datetime_string , time_unit) FROM { tb_name | stb_name } [WHERE clause];
539
```
540

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

543
**返回结果数据类型**:TIMESTAMP。
544

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

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

549 550
**使用说明**
- 支持的时间单位 time_unit 如下:
551
          1b(纳秒), 1u(微秒),1a(毫秒),1s(秒),1m(分),1h(小时),1d(天), 1w(周)。
552
- 返回的时间戳精度与当前 DATABASE 设置的时间精度一致。
G
Ganlin Zhao 已提交
553
- 输入包含不符合时间日期格式的字符串则返回 NULL。
554 555


556
#### TIMEZONE
557

558 559 560
```sql
SELECT TIMEZONE() FROM { tb_name | stb_name } [WHERE clause];
```
561

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

564
**返回结果数据类型**:VARCHAR。
565

566
**应用字段**:无
567

568
**适用于**:表和超级表。
569 570


571
#### TODAY
572

573 574 575 576
```sql
SELECT TODAY() FROM { tb_name | stb_name } [WHERE clause];
SELECT select_expr FROM { tb_name | stb_name } WHERE ts_col cond_operatior TODAY()];
INSERT INTO tb_name VALUES (TODAY(), ...);
577 578
```

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

581
**返回结果数据类型**:TIMESTAMP。
582

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

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

587
**使用说明**
588

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


594
## 聚合函数
595

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

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

G
Ganlin Zhao 已提交
600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616
### APERCENTILE

```sql
SELECT APERCENTILE(field_name, P[, algo_type]) FROM { tb_name | stb_name } [WHERE clause]
```

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

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

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

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

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

619
### AVG
620

G
gccgdb1234 已提交
621
```sql
622
SELECT AVG(field_name) FROM tb_name [WHERE clause];
623 624
```

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

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

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

631
**适用于**:表和超级表。
632 633


634
### COUNT
635

G
gccgdb1234 已提交
636
```sql
637
SELECT COUNT([*|field_name]) FROM tb_name [WHERE clause];
638 639
```

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

642
**返回数据类型**:BIGINT。
643

644
**适用数据类型**:全部类型字段。
645

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

648
**使用说明**:
649

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


654
### ELAPSED
655

G
gccgdb1234 已提交
656
```sql
657
SELECT ELAPSED(ts_primary_key [, time_unit]) FROM { tb_name | stb_name } [WHERE clause] [INTERVAL(interval [, offset]) [SLIDING sliding]];
658 659
```

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

662
**返回结果类型**:DOUBLE。
663

664
**适用数据类型**:TIMESTAMP。
665

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

668
**说明**
669 670 671
- field_name参数只能是表的第一列,即 TIMESTAMP 类型的主键列。
- 按time_unit参数指定的时间单位返回,最小是数据库的时间分辨率。time_unit 参数未指定时,以数据库的时间分辨率为时间单位。支持的时间单位 time_unit 如下:
          1b(纳秒), 1u(微秒),1a(毫秒),1s(秒),1m(分),1h(小时),1d(天), 1w(周)。
672 673 674 675 676 677
- 可以和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等函数混合使用。
678

G
Ganlin Zhao 已提交
679

680
### LEASTSQUARES
681

G
gccgdb1234 已提交
682
```sql
683
SELECT LEASTSQUARES(field_name, start_val, step_val) FROM tb_name [WHERE clause];
684 685
```

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

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

690
**适用数据类型**:field_name 必须是数值类型。
691

692
**适用于**:表。
693 694


695
### SPREAD
696

G
gccgdb1234 已提交
697
```sql
698
SELECT SPREAD(field_name) FROM { tb_name | stb_name } [WHERE clause];
699 700
```

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

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

705
**适用数据类型**:INTEGER, TIMESTAMP。
706

707
**适用于**:表和超级表。
708 709


710
### STDDEV
711

G
gccgdb1234 已提交
712
```sql
713
SELECT STDDEV(field_name) FROM tb_name [WHERE clause];
714 715
```

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

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

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

722
**适用于**:表和超级表。
723 724


725
### SUM
726

G
gccgdb1234 已提交
727
```sql
728
SELECT SUM(field_name) FROM tb_name [WHERE clause];
729 730
```

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

733
**返回数据类型**:DOUBLE, BIGINT。
734

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

737
**适用于**:表和超级表。
738 739


740
### HYPERLOGLOG
741

G
gccgdb1234 已提交
742
```sql
743
SELECT HYPERLOGLOG(field_name) FROM { tb_name | stb_name } [WHERE clause];
744 745
```

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

750
**返回结果类型**:INTEGER。
751

752
**适用数据类型**:任何类型。
753

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


757
### HISTOGRAM
758

G
gccgdb1234 已提交
759
```sql
760
SELECT HISTOGRAM(field_namebin_type, bin_description, normalized) FROM tb_name [WHERE clause];
761 762
```

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

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

767
**适用数据类型**:数值型字段。
768

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

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

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

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


G
Ganlin Zhao 已提交
787
### PERCENTILE
788

G
gccgdb1234 已提交
789
```sql
G
Ganlin Zhao 已提交
790
SELECT PERCENTILE(field_name, P) FROM { tb_name } [WHERE clause];
791 792
```

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

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

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

G
Ganlin Zhao 已提交
799 800 801
**适用于**:表。

**使用说明***P*值取值范围 0≤*P*≤100,为 0 的时候等同于 MIN,为 100 的时候等同于 MAX。
802

G
Ganlin Zhao 已提交
803 804 805 806

## 选择函数

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

808
### BOTTOM
809

G
gccgdb1234 已提交
810
```sql
811 812
SELECT BOTTOM(field_name, K) FROM { tb_name | stb_name } [WHERE clause];
```
813

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

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

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

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

822
**使用说明**:
823

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

828 829
### FIRST

G
gccgdb1234 已提交
830
```sql
831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846
SELECT FIRST(field_name) FROM { tb_name | stb_name } [WHERE clause];
```

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

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

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

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

**使用说明**:

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

848
### INTERP
849

G
gccgdb1234 已提交
850
```sql
G
Ganlin Zhao 已提交
851
SELECT INTERP(field_name) FROM { tb_name | stb_name } [WHERE where_condition] RANGE(timestamp1,timestamp2) EVERY(interval) FILL({ VALUE | PREV | NULL | LINEAR | NEXT});
852 853
```

854
**功能说明**:返回指定时间截面指定列的记录值或插值。
855

856
**返回数据类型**:同字段类型。
857

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

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

862
**使用说明**
863

864 865
- INTERP 用于在指定时间断面获取指定列的记录值,如果该时间断面不存在符合条件的行数据,那么会根据 FILL 参数的设定进行插值。
- INTERP 的输入数据为指定列的数据,可以通过条件语句(where 子句)来对原始列数据进行过滤,如果没有指定过滤条件则输入为全部数据。
G
Ganlin Zhao 已提交
866
- INTERP 的输出时间范围根据 RANGE(timestamp1,timestamp2)字段来指定,需满足 timestamp1<=timestamp2。其中 timestamp1(必选值)为输出时间范围的起始值,即如果 timestamp1 时刻符合插值条件则 timestamp1 为输出的第一条记录,timestamp2(必选值)为输出时间范围的结束值,即输出的最后一条记录的 timestamp 不能大于 timestamp2。
867
- INTERP 根据 EVERY 字段来确定输出时间范围内的结果条数,即从 timestamp1 开始每隔固定长度的时间(EVERY 值)进行插值。如果没有指定 EVERY,则默认窗口大小为无穷大,即从 timestamp1 开始只有一个窗口。
G
Ganlin Zhao 已提交
868 869
- INTERP 根据 FILL 字段来决定在每个符合输出条件的时刻如何进行插值。
- INTERP 只能在一个时间序列内进行插值,因此当作用于超级表时必须跟 partition by tbname 一起使用。
870 871

### LAST
872

G
gccgdb1234 已提交
873
```sql
874
SELECT LAST(field_name) FROM { tb_name | stb_name } [WHERE clause];
875 876
```

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

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

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

883 884 885 886 887 888 889
**适用于**:表和超级表。

**使用说明**:

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


892
### LAST_ROW
893

G
gccgdb1234 已提交
894
```sql
895
SELECT LAST_ROW(field_name) FROM { tb_name | stb_name };
896 897
```

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

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

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

904 905 906
**适用于**:表和超级表。

**使用说明**
907

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

911
### MAX
912

G
gccgdb1234 已提交
913
```sql
914
SELECT MAX(field_name) FROM { tb_name | stb_name } [WHERE clause];
915 916
```

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

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

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

923
**适用于**:表和超级表。
924 925


926
### MIN
927

G
gccgdb1234 已提交
928
```sql
929
SELECT MIN(field_name) FROM {tb_name | stb_name} [WHERE clause];
930 931
```

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

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

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

938
**适用于**:表和超级表。
939 940


G
Ganlin Zhao 已提交
941
### MODE
942

G
gccgdb1234 已提交
943
```sql
G
Ganlin Zhao 已提交
944
SELECT MODE(field_name) FROM tb_name [WHERE clause];
945 946
```

G
Ganlin Zhao 已提交
947
**功能说明**:返回出现频率最高的值,若存在多个频率相同的最高值,输出NULL。
948

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

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

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

G
Ganlin Zhao 已提交
955 956 957 958 959 960 961

### SAMPLE

```sql
SELECT SAMPLE(field_name, K) FROM { tb_name | stb_name } [WHERE clause]
```

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

G
Ganlin Zhao 已提交
964
**返回结果类型**: 同原始数据类型, 返回结果中带有该行记录的时间戳。
G
Ganlin Zhao 已提交
965

G
Ganlin Zhao 已提交
966
**适用数据类型**: 在超级表查询中使用时,不能应用在标签之上。
G
Ganlin Zhao 已提交
967

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

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

G
Ganlin Zhao 已提交
972
**使用说明**
G
Ganlin Zhao 已提交
973 974 975

- 不能参与表达式计算;该函数可以应用在普通表和超级表上;
- 使用在超级表上的时候,需要搭配 PARTITION by tbname 使用,将结果强制规约到单个时间线。
976 977


978
### TAIL
979

G
gccgdb1234 已提交
980
```sql
981
SELECT TAIL(field_name, k, offset_val) FROM {tb_name | stb_name} [WHERE clause];
982 983
```

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

986
**参数范围**:k: [1,100] offset_val: [0,100]。
987

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

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

992
**适用于**:表、超级表。
993

994 995

### TOP
996

G
gccgdb1234 已提交
997
```sql
998
SELECT TOP(field_name, K) FROM { tb_name | stb_name } [WHERE clause];
999 1000
```

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

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

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

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

1009
**使用说明**:
1010

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

1015
### UNIQUE
1016

G
gccgdb1234 已提交
1017
```sql
1018 1019
SELECT UNIQUE(field_name) FROM {tb_name | stb_name} [WHERE clause];
```
1020

1021
**功能说明**:返回该列的数值首次出现的值。该函数功能与 distinct 相似,但是可以匹配标签和时间戳信息。可以针对除时间列以外的字段进行查询,可以匹配标签和时间戳,其中的标签和时间戳是第一次出现时刻的标签和时间戳。
1022

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

1025
**适用数据类型**:适合于除时间类型以外的字段。
1026

1027
**适用于**: 表和超级表。
1028 1029


1030
## 时序数据特有函数
1031

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

1034
### CSUM
1035

1036
```sql
G
gccgdb1234 已提交
1037
SELECT CSUM(field_name) FROM { tb_name | stb_name } [WHERE clause]
1038
```
1039

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

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

G
gccgdb1234 已提交
1044
**适用数据类型**:数值类型。
1045

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

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

G
Ganlin Zhao 已提交
1050 1051
**使用说明**

G
Ganlin Zhao 已提交
1052
- 不支持 +、-、*、/ 运算,如 csum(col1) + csum(col2)。
G
Ganlin Zhao 已提交
1053
- 只能与聚合(Aggregation)函数一起使用。 该函数可以应用在普通表和超级表上。
G
Ganlin Zhao 已提交
1054
- 使用在超级表上的时候,需要搭配 PARTITION BY tbname使用,将结果强制规约到单个时间线。
1055 1056


1057
### DERIVATIVE
1058

G
gccgdb1234 已提交
1059
```sql
1060
SELECT DERIVATIVE(field_name, time_interval, ignore_negative) FROM tb_name [WHERE clause];
1061 1062
```

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

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

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

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

G
Ganlin Zhao 已提交
1071 1072
**使用说明**:

G
Ganlin Zhao 已提交
1073 1074
- DERIVATIVE 函数可以在由 PARTITION BY 划分出单独时间线的情况下用于超级表(也即 PARTITION BY tbname)。
- 可以与选择相关联的列一起使用。 例如: select \_rowts, DERIVATIVE() from。
1075

1076
### DIFF
1077

G
gccgdb1234 已提交
1078 1079 1080
```sql
SELECT {DIFF(field_name, ignore_negative) | DIFF(field_name)} FROM tb_name [WHERE clause];
```
1081

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

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

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

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

G
Ganlin Zhao 已提交
1090
**使用说明**:
G
Ganlin Zhao 已提交
1091

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


1096
### IRATE
1097

G
gccgdb1234 已提交
1098
```sql
1099
SELECT IRATE(field_name) FROM tb_name WHERE clause;
1100 1101
```

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

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

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

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

1110

1111
### MAVG
1112

1113
```sql
G
gccgdb1234 已提交
1114
SELECT MAVG(field_name, K) FROM { tb_name | stb_name } [WHERE clause]
1115
```
1116

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

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

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

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

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

G
Ganlin Zhao 已提交
1127 1128 1129
**使用说明**

- 不支持 +、-、*、/ 运算,如 mavg(col1, k1) + mavg(col2, k1);
G
Ganlin Zhao 已提交
1130 1131
- 只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用;
- 使用在超级表上的时候,需要搭配 PARTITION BY tbname使用,将结果强制规约到单个时间线。
1132 1133


1134
### STATECOUNT
1135

G
gccgdb1234 已提交
1136
```sql
1137
SELECT STATECOUNT(field_name, oper, val) FROM { tb_name | stb_name } [WHERE clause];
1138 1139
```

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

1142
**参数范围**
1143

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

1147
**返回结果类型**:INTEGER。
1148

G
gccgdb1234 已提交
1149
**适用数据类型**:数值类型。
1150

1151
**嵌套子查询支持**:不支持应用在子查询上。
1152

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

1155
**使用说明**
1156

1157
- 该函数可以应用在普通表上,在由 PARTITION BY 划分出单独时间线的情况下用于超级表(也即 PARTITION BY tbname)
1158
- 不能和窗口操作一起使用,例如 interval/state_window/session_window。
1159

1160 1161

### STATEDURATION
1162 1163

```sql
1164
SELECT stateDuration(field_name, oper, val, unit) FROM { tb_name | stb_name } [WHERE clause];
1165 1166
```

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

1169
**参数范围**
1170

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

1175
**返回结果类型**:INTEGER。
1176

G
gccgdb1234 已提交
1177
**适用数据类型**:数值类型。
1178

1179
**嵌套子查询支持**:不支持应用在子查询上。
1180

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

1183
**使用说明**
1184

1185
- 该函数可以应用在普通表上,在由 PARTITION BY 划分出单独时间线的情况下用于超级表(也即 PARTITION BY tbname)
1186
- 不能和窗口操作一起使用,例如 interval/state_window/session_window。
1187 1188


1189 1190
### TWA

G
gccgdb1234 已提交
1191
```sql
1192
SELECT TWA(field_name) FROM tb_name WHERE clause;
1193 1194
```

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

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

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

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

1203
**使用说明**: TWA 函数可以在由 PARTITION BY 划分出单独时间线的情况下用于超级表(也即 PARTITION BY tbname)。
1204 1205


1206
## 系统信息函数
1207

1208
### DATABASE
1209

G
gccgdb1234 已提交
1210
```sql
1211
SELECT DATABASE();
1212 1213
```

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


1217
### CLIENT_VERSION
1218

G
gccgdb1234 已提交
1219
```sql
1220 1221
SELECT CLIENT_VERSION();
```
1222

1223
**说明**:返回客户端版本。
1224

1225
### SERVER_VERSION
1226

G
gccgdb1234 已提交
1227
```sql
1228 1229
SELECT SERVER_VERSION();
```
1230

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

1233
### SERVER_STATUS
1234

G
gccgdb1234 已提交
1235
```sql
1236
SELECT SERVER_STATUS();
1237 1238 1239
```

**说明**:返回服务端当前的状态。