TDengine SQL 函数
- 单行函数
- 数学函数
- ABS
- ACOS
- ASIN
- ATAN
- CEIL
- COS
- DEGREES
- EXP
- FLOOR
- GREATEST
- LEAST
- LN
- LOG
- MOD
- PI
- POW
- RADIANS
- RAND
- ROUND
- SIGN
- SIN
- SQRT
- TAN
- TRUNCATE
- 字符串函数
- ASCII
- CHAR
- CHAR_LENGTH
- CONCAT
- CONCAT_WS
- LENGTH
- LOWER
- LTRIM
- POSITION
- REPEAT
- REPLACE
- RTRIM
- SUBSTRING/SUBSTR
- SUBSTRING_INDEX
- TRIM
- UPPER
- 转换函数
- CAST
- TO_CHAR
- TO_ISO8601
- TO_JSON
- TO_TIMESTAMP
- TO_UNIXTIMESTAMP
- 时间和日期函数
- DAYOFWEEK
- NOW
- TIMEDIFF
- TIMETRUNCATE
- TIMEZONE
- TODAY
- WEEK
- WEEKDAY
- WEEKOFYEAR
- 数学函数
- 聚合函数
- APERCENTILE
- AVG
- COUNT
- ELAPSED
- HISTOGRAM
- HYPERLOGLOG
- LEASTSQUARES
- PERCENTILE
- SPREAD
- STDDEV/STDDEV_POP
- SUM
- VAR_POP
- 选择函数
- BOTTOM
- FIRST
- INTERP
- LAST
- LAST_ROW
- MAX
- MIN
- MODE
- SAMPLE
- TAIL
- TOP
- UNIQUE
- COLS
- 时序数据特有函数
- CSUM
- DERIVATIVE
- DIFF
- IRATE
- MAVG
- STATECOUNT
- STATEDURATION
- TWA
- 系统信息函数
- CLIENT_VERSION
- CURRENT_USER
- DATABASE
- SERVER_STATUS
- SERVER_VERSION
- Geometry 函数
- Geometry 输入函数
- ST_GeomFromText
- Geometry 输出函数
- ST_AsText
- Geometry 关系函数
- ST_Contains
- ST_ContainsProperly
- ST_Covers
- ST_Equals
- ST_Intersects
- ST_Touches
- Geometry 输入函数
简介
TDengine 中支持的 SQL 函数比较丰富,我们按函数的类型进行了分类。从使用规则上,分为两大类,一类是投影查询函数,另一类是聚合查询函数。
投影函数只能用到投影查询中,聚合函数只能使用在聚合查询中,两种类型函数使用在一起会报语法错误。
-
投影函数
定义
:投影函数用于从关系(表)中选取特定的列(属性),并将这些列的值进行展示或进一步处理,它主要是对关系进行垂直方向的筛选。
作用
:在数据库查询中,通过投影函数可以选择需要返回的列,而不必返回表中的所有列,这样可以减少数据的传输和处理量,提高查询效率,同时也能更好地满足用户对特定信息的需求。 -
聚合函数
定义
:聚合函数是对一组数据进行计算,并返回一个单一的汇总值。它会对表中的多行数据进行统计计算,例如计算总和、平均值、最大值、最小值、计数等。
作用
:用于对数据进行分组汇总和统计分析,帮助用户快速获取数据的整体特征和统计信息,在数据分析、报表生成等场景中非常常用。
单行函数
单行函数为查询结果中的每一行返回一个结果行。
数学函数
ABS
ABS(expr)
功能说明:获得指定字段的绝对值。
返回结果类型:与指定字段的原始数据类型一致。
适用数据类型:数值类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
ACOS
ACOS(expr)
功能说明:获得指定字段的反余弦结果。
返回结果类型:DOUBLE。
适用数据类型:数值类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
ASIN
ASIN(expr)
功能说明:获得指定字段的反正弦结果。
返回结果类型:DOUBLE。
适用数据类型:数值类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
ATAN
ATAN(expr)
功能说明:获得指定字段的反正切结果。
返回结果类型:DOUBLE。
适用数据类型:数值类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
CEIL
CEIL(expr)
功能说明:获得指定字段的向上取整数的结果。
返回结果类型:与指定字段的原始数据类型一致。
适用数据类型:数值类型。
适用于:表和超级表。
嵌套子查询支持:适用于内层查询和外层查询。
使用说明:只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
COS
COS(expr)
功能说明:获得指定字段的余弦结果。
返回结果类型:DOUBLE。
适用数据类型:数值类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
DEGREES
DEGREES(expr)
功能说明:计算指定参数由弧度值转为角度后的值。
版本:v3.3.3.0
返回结果类型:DOUBLE。
适用数据类型:数值类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 如果
expr
为 NULL,则返回 NULL。 - degree = radian * 180 / π。
- 只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
举例:
taos> select degrees(PI());degrees(pi()) |
============================180.000000000000000 |
EXP
EXP(expr)
功能说明:返回 e(自然对数的底)的指定乘方后的值。
版本:v3.3.3.0
返回结果类型:DOUBLE。
适用数据类型:数值类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 如果
expr
为 NULL,返回 NULL。 - 只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
举例:
taos> select exp(2);exp(2) |
============================7.389056098930650 |
FLOOR
FLOOR(expr)
功能说明:获得指定字段的向下取整数的结果。
其他使用说明参见 CEIL 函数描述。
LN
LN(expr)
功能说明:返回指定参数的自然对数。
版本:v3.3.3.0
返回结果类型:DOUBLE。
适用数据类型:数值类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 如果
expr
为 NULL,返回 NULL。 - 如果
epxr
小于等于 0,返回 NULL。 - 只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
举例:
taos> select ln(10);ln(10) |
============================2.302585092994046 |
LOG
LOG(expr1[, expr2])
功能说明:获得 expr1 对于底数 expr2 的对数。如果 expr2 参数省略,则返回指定字段的自然对数值。
返回结果类型:DOUBLE。
适用数据类型:数值类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
MOD
MOD(expr1, expr2)
功能说明:计算 expr1 % expr2 的结果。
版本:v3.3.3.0
返回结果类型:DOUBLE。
适用数据类型:数值类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 如果
expr2
为 0 则返回 NULL。 - 如果
expr1
或expr2
为 NULL,返回 NULL。 - 只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
举例:
taos> select mod(10,3);mod(10,3) |
============================1.000000000000000 |taos> select mod(1,0);mod(1,0) |
============================NULL |
PI
PI()
功能说明:返回圆周率 π 的值。
版本:v3.3.3.0
返回结果类型:DOUBLE。
适用数据类型:无。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- π ≈ 3.141592653589793。
- 只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
举例:
taos> select pi();pi() |
============================3.141592653589793 |
POW
POW(expr1, expr2)
功能说明:获得 expr1 的指数为 expr2 的幂。
返回结果类型:DOUBLE。
适用数据类型:数值类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
RADIANS
RADIANS(expr)
功能说明:计算指定参数由角度值转为弧度后的值。
版本:v3.3.3.0
返回结果类型:DOUBLE。
适用数据类型:数值类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 如果
expr
为 NULL,则返回 NULL。 - radian = degree * π / 180。
- 只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
举例:
taos> select radians(180);radians(180) |
============================3.141592653589793 |
RAND
RAND([seed])
功能说明:返回一个从0到1均匀分布的随机数。
版本:v3.3.3.0
返回结果类型:DOUBLE。
适用数据类型:
seed
:INTEGER。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 如果指定了
seed
值,那么将会用指定的seed
作为随机种子,确保生成的随机数序列具有确定性。 - 只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
举例:
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 |
ROUND
ROUND(expr[, digits])
功能说明:获得指定字段的四舍五入的结果。
返回结果类型:与指定字段的原始数据类型一致。
适用数据类型:
expr
:数值类型。digits
:数值类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 若
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 开始支持。
举例:
taos> select round(8888.88);round(8888.88) |
============================8889.000000000000000 |taos> select round(8888.88,-1);round(8888.88,-1) |
============================8890.000000000000000 |
SIGN
SIGN(expr)
功能说明:返回指定参数的符号。
版本:v3.3.3.0
返回结果类型:与指定字段的原始数据类型一致。
适用数据类型:数值类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 如果
expr
为负,返回 -1。 - 如果
expr
为正,返回 1。 - 如果
expr
为 0,返回 0。 - 如果
expr
为 NULL,返回 NULL。 - 只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
举例:
taos> select sign(-1);sign(-1) |
========================-1 |taos> select sign(1);sign(1) |
========================1 |taos> select sign(0);sign(0) |
========================0 |
SIN
SIN(expr)
功能说明:获得指定字段的正弦结果。
返回结果类型:DOUBLE。
适用数据类型:数值类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
SQRT
SQRT(expr)
功能说明:获得指定字段的平方根。
返回结果类型:DOUBLE。
适用数据类型:数值类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
TAN
TAN(expr)
功能说明:获得指定字段的正切结果。
返回结果类型:DOUBLE。
适用数据类型:数值类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
TRUNCATE
TRUNCATE(expr, digits)
功能说明:获得指定字段按照指定位数截断的值。
版本:v3.3.3.0
返回结果类型:与 expr
字段的原始数据类型一致。
适用数据类型:
expr
:数值类型。digits
:数值类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 若
expr
或digits
为 NULL,返回 NULL。 - 截取指按保留位数直接进行截取,没有四舍五入。
digits
大于零表示对小数位进行操作,截取到digits
位小数,若小数位数小于digits
位,不进行截取操作,直接返回。digits
等于零表示丢掉小数位。digits
小于零表示丢掉小数位,并将小数点左侧digits
位置0
。若小数点左侧的位数小于digits
位,返回 0。- 由于暂未支持 DECIMAL 类型,所以该函数会用 DOUBLE 和 FLOAT 来表示包含小数的结果,但是 DOUBLE 和 FLOAT 是有精度上限的,当位数太多时使用该函数可能没有意义。
- 只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
举例:
taos> select truncate(8888.88, 0);truncate(8888.88, 0) |
============================8888.000000000000000 |taos> select truncate(8888.88, -1);truncate(8888.88, -1) |
============================8880.000000000000000 |
字符串函数
字符串函数的输入参数为字符串类型,返回结果为数值类型或字符串类型。
ASCII
ASCII(expr)
功能说明:返回字符串第一个字符的 ASCII 码。
版本:v3.3.3.0
返回结果数据类型:BIGINT。
适用数据类型:VARCHAR、NCHAR。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 如果
expr
为 NULL,返回 NULL。 - 如果
expr
的第一个字符为多字节字符,只会返回该字符第一个字节的值对应的 ASCII 码。
举例:
taos> select ascii('testascii');ascii('testascii') |
=====================116 |
CHAR
CHAR(expr1 [, expr2] [, epxr3] ...)
功能说明:将输入参数当作整数,并返回这些整数在 ASCII 编码中对应的字符。
版本:v3.3.3.0
返回结果类型:VARCHAR。
适用数据类型:整数类型,VARCHAR、NCHAR。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 输入的值超过 255 会被转化成多字节的结果,如
CHAR(256)
等同于CHAR(1,0)
、CHAR(256 * 256)
等同于CHAR(1,0,0)
。 - 输入参数的 NULL 值会被跳过。
- 输入参数若为字符串类型,会将其转换为数值类型处理。
- 若输入的参数对应的字符为不可打印字符,返回值中仍有该参数对应的字符,但是可能无法显示出来。
- 输入参数的个数上限为 2^31 - 1 个。
举例:
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 |
CHAR_LENGTH
CHAR_LENGTH(expr)
功能说明:以字符计数的字符串长度。
返回结果类型:BIGINT。
适用数据类型:VARCHAR、NCHAR。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 与
LENGTH()
函数不同在于,对于多字节字符,比如中文字符,CHAR_LENGTH()
函数会将其算做一个字符,长度为 1,而LENGTH()
会计算其字节数,长度为 3。比如CHAR_LENGTH('你好') = 2
,LENGTH('你好') = 6
。 - 如果
expr
为 NULL,返回 NULL。
举例:
taos> select char_length('Hello world');char_length('Hello world') |
=============================11 |taos> select char_length('你好 世界');char_length('你好 世界') |
===============================5 |
CONCAT
CONCAT(expr1, expr2 [, expr] ... )
功能说明:字符串连接函数。
返回结果类型:如果所有参数均为 VARCHAR 类型,则结果类型为 VARCHAR。如果参数包含NCHAR类型,则结果类型为NCHAR。如果参数包含NULL值,则输出值为NULL。
适用数据类型:VARCHAR、NCHAR。该函数最小参数个数为 2 个,最大参数个数为 8 个。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
CONCAT_WS
CONCAT_WS(separator_expr, expr1, expr2 [, expr] ...)
功能说明:带分隔符的字符串连接函数。
返回结果类型:如果所有参数均为VARCHAR类型,则结果类型为VARCHAR。如果参数包含NCHAR类型,则结果类型为NCHAR。如果参数包含NULL值,则输出值为NULL。
适用数据类型:VARCHAR、NCHAR。该函数最小参数个数为 3 个,最大参数个数为 9 个。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
LENGTH
LENGTH(expr)
功能说明:以字节计数的长度。
返回结果类型:BIGINT。
适用数据类型:VARCHAR、NCHAR、VARBINARY。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
LOWER
LOWER(expr)
功能说明:将字符串参数值转换为全小写字母。
返回结果类型:与输入字段的原始类型相同。
适用数据类型:VARCHAR、NCHAR。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
LTRIM
LTRIM(expr)
功能说明:返回清除左边空格后的字符串。
返回结果类型:与输入字段的原始类型相同。
适用数据类型:VARCHAR、NCHAR。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
POSITION
POSITION(expr1 IN expr2)
功能说明:计算字符串 expr1
在字符串 expr2
中的位置。
版本:v3.3.3.0
返回结果类型:BIGINT。
适用数据类型:
expr1
:VARCHAR、NCHAR。expr2
:VARCHAR、NCHAR。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 若
expr1
或expr2
为 NULL,返回 NULL。 - 若
expr1
在expr2
中不存在,返回 0。 - 若
expr1
为空串,认为expr1
在expr2
中总能匹配成功,返回 1。 - 返回的位置是 1-base 的。
- 该函数是多字节安全的。
举例:
taos> select position('a' in 'cba');position('a' in 'cba') |
=========================3 |taos> select position('' in 'cba');position('' in 'cba') |
========================1 |taos> select position('d' in 'cba');position('d' in 'cba') |
=========================0 |
REPEAT
REPEAT(expr, count)
功能说明:返回将字符串重复指定次数得到的字符串。
版本:v3.3.3.0
返回结果类型:与输入字段 expr
的原始类型相同。
适用数据类型:
expr
:VARCHAR、NCHAR。count
:INTEGER。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 若
count < 1
,返回空串。 - 若
expr
或count
为 NULL,返回 NULL。
举例:
taos> select repeat('abc',5);repeat('abc',5) |
============================abcabcabcabcabc |taos> select repeat('abc',-1);repeat('abc',-1) |
===================|
REPLACE
REPLACE(expr, from_str, to_str)
功能说明:将字符串中的 from_str
全部替换为 to_str
。
版本:v3.3.3.0
返回结果类型:与输入字段 expr
的原始类型相同。
适用数据类型:
expr
:VARCHAR、NCHAR。from_str
:VARCHAR、NCHAR。to_str
:VARCHAR、NCHAR。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 该函数是大小写敏感的。
- 任意参数为 NULL,返回 NULL。
- 该函数是多字节安全的。
举例:
taos> select replace('aabbccAABBCC', 'AA', 'DD');replace('aabbccAABBCC', 'AA', 'DD') |
======================================aabbccDDBBCC |
RTRIM
RTRIM(expr)
功能说明:返回清除右边空格后的字符串。
返回结果类型:与输入字段的原始类型相同。
适用数据类型:VARCHAR、NCHAR。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
SUBSTRING/SUBSTR
SUBSTRING/SUBSTR(expr, pos [, len])
SUBSTRING/SUBSTR(expr FROM pos [FOR len])
功能说明:返回字符串 expr
在 pos
位置开始的子串,若指定了 len
,则返回在 pos
位置开始,长度为 len
的子串。
返回结果类型:与输入字段 expr
的原始类型相同。
适用数据类型:
expr
:VARCHAR、NCHAR。pos
:整数类型。len
:整数类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 若
pos
为正数,则返回的结果为expr
从左到右开始数pos
位置开始的右侧的子串。 - 若
pos
为负数,则返回的结果为expr
从右到左开始数pos
位置开始的右侧的子串。 - 任意参数为 NULL,返回 NULL。
- 该函数是多字节安全的。
- 若
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 开始支持。
举例:
taos> select substring('tdengine', 0);substring('tdengine', 0) |
===========================|taos> select substring('tdengine', 3);substring('tdengine', 3) |
===========================engine |taos> select substring('tdengine', 3,3);substring('tdengine', 3,3) |
=============================eng |taos> select substring('tdengine', -3,3);substring('tdengine', -3,3) |
==============================ine |taos> select substring('tdengine', -3,-3);substring('tdengine', -3,-3) |
===============================|
SUBSTRING_INDEX
SUBSTRING_INDEX(expr, delim, count)
功能说明:返回字符串 expr
在出现指定次数分隔符的位置截取的子串。
版本:v3.3.3.0
返回结果类型:与输入字段 expr
的原始类型相同。
适用数据类型:
expr
:VARCHAR、NCHAR。delim
:VARCHAR、NCHAR。count
:INTEGER。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 若
count
为正数,则返回的结果为expr
从左到右开始数第count
次 出现delim
的位置左侧的字符串。 - 若
count
为负数,则返回的结果为expr
从右到左开始数第count
的绝对值次 出现delim
的位置右侧的字符串。 - 任意参数为 NULL,返回 NULL。
- 该函数是多字节安全的。
举例:
taos> select substring_index('www.taosdata.com','.',2);substring_index('www.taosdata.com','.',2) |
============================================www.taosdata |taos> select substring_index('www.taosdata.com','.',-2);substring_index('www.taosdata.com','.',-2) |
=============================================taosdata.com |
TRIM
TRIM([{LEADING | TRAILING | BOTH} [remstr] FROM] expr)
TRIM([remstr FROM] expr)
功能说明:返回去掉了所有 remstr 前缀或后缀的字符串 epxr。
版本:v3.3.3.0
返回结果类型:与输入字段 epxr 的原始类型相同。
适用数据类型:
- remstr:VARCHAR、NCHAR。
- epxr:VARCHAR、NCHAR。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 第一个可选变量[LEADING | BOTH | TRAILING]指定要剪裁字符串的哪一侧:
- LEADING 将移除字符串开头的指定字符。
- TRAILING 将移除字符串末尾的指定字符。
- BOTH(默认值)将移除字符串开头和末尾的指定字符。
- 第二个可选变量[remstr]指定要裁剪掉的字符串:
- 如果不指定 remstr,默认裁剪空格。
- remstr 可以指定多个字符,如trim(‘ab’ from ‘abacd’),此时会将 ‘ab’ 看做一个整体来裁剪,得到裁剪结果 ‘acd’。
- 若 expr 为 NULL,返回 NULL。
- 该函数是多字节安全的。
举例:
taos> select trim(' a ');trim(' a ') |
=============================a |taos> select trim(leading from ' a ');trim(leading from ' a ') |
==========================================a |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 |
UPPER
UPPER(expr)
功能说明:将字符串参数值转换为全大写字母。
返回结果类型:与输入字段的原始类型相同。
适用数据类型:VARCHAR、NCHAR。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
转换函数
转换函数将值从一种数据类型转换为另一种数据类型。
CAST
CAST(expr AS type_name)
功能说明:数据类型转换函数,返回 expr 转换为 type_name 指定的类型后的结果。
返回结果类型:CAST 中指定的类型(type_name)。
适用数据类型:输入参数 expr 的类型可以是除 JSON 和 VARBINARY 外的所有类型。如果 type_name 为 VARBINARY,则 expr 只能是 VARCHAR 类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 对于不能支持的类型转换会直接报错。
- 对于类型支持但某些值无法正确转换的情况,对应的转换后的值以转换函数输出为准。目前可能遇到的几种情况:
- 字符串类型转换数值类型时可能出现的无效字符情况,例如 “a” 可能转为 0,但不会报错。
- 转换到数值类型时,数值大于 type_name 可表示的范围时,则会溢出,但不会报错。
- 转换到字符串类型时,如果转换后长度超过 type_name 中指定的长度,则会截断,但不会报错。
TO_CHAR
TO_CHAR(ts, format_str_literal)
功能说明:将timestamp类型按照指定格式转换为字符串
版本:v3.2.2.0
返回结果数据类型:VARCHAR
应用字段:TIMESTAMP
嵌套子查询支持:适用于内层查询和外层查询
适用于:表和超级表
支持的格式
格式 | 说明 | 例子 |
---|---|---|
AM,am,PM,pm | 无点分隔的上午下午 | 07:00:00am |
A.M.,a.m.,P.M.,p.m. | 有点分隔的上午下午 | 07:00:00a.m. |
YYYY,yyyy | 年,4 个及以上数字 | 2023-10-10 |
YYY,yyy | 年,最后 3 位数字 | 023-10-10 |
YY,yy | 年,最后 2 位数字 | 23-10-10 |
Y,y | 年,最后一位数字 | 3-10-10 |
MONTH | 月,全大写 | 2023-JANUARY-01 |
Month | 月,首字母大写 | 2023-January-01 |
month | 月,全小写 | 2023-january-01 |
MON | 月,缩写,全大写(三个字符) | JAN、SEP |
Mon | 月,缩写,首字母大写 | Jan、Sep |
mon | 月,缩写,全小写 | jan、sep |
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 |
hh12,HH12,hh,HH | 小时,01-12 | 2023-01-30 12:59:59PM |
MI,mi | 分钟,00-59 | |
SS,ss | 秒,00-59 | |
MS,ms | 毫秒,000-999 | |
US,us | 微秒,000000-999999 | |
NS,ns | 纳秒,000000000-999999999 | |
TZH,tzh | 时区小时 | 2023-01-30 11:59:59PM +08 |
使用说明:
Month
、Day
等的输出格式是左对齐的,右侧添加空格,如2023-OCTOBER -01
、2023-SEPTEMBER-01
,9 月是月份中英文字母数最长的,因此 9 月没有空格。星期类似。- 使用
ms
、us
、ns
时,以上三种格式的输出只在精度上不同,比如 ts 为1697182085123
,ms
的输出为123
,us
的输出为123000
,ns
的输出为123000000
。 - 时间格式中无法匹配规则的内容会直接输出。如果想要在格式串中指定某些能够匹配规则的部分不做转换,可以使用双引号,如
to_char(ts, 'yyyy-mm-dd "is formated by yyyy-mm-dd"')
。如果想要输出双引号,那么在双引号之前加一个反斜杠,如to_char(ts, '\"yyyy-mm-dd\"')
将会输出"2023-10-10"
。 - 那些输出是数字的格式,如
YYYY
、DD
,大写与小写意义相同,即yyyy
和YYYY
可以互换。 - 推荐在时间格式中带时区信息,如果不带则默认输出的时区为服务端或客户端所配置的时区。
- 输入时间戳的精度由所查询表的精度确定,若未指定表,则精度为毫秒。
TO_ISO8601
TO_ISO8601(expr [, timezone])
功能说明:将时间戳转换成为 ISO8601 标准的日期时间格式,并附加时区信息。timezone 参数允许用户为输出结果指定附带任意时区信息。如果 timezone 参数省略,输出结果则附带当前客户端的系统时区信息。
返回结果数据类型:VARCHAR 类型。
适用数据类型:INTEGER、TIMESTAMP。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- timezone 参数允许输入的时区格式为:[z/Z, +/-hhmm, +/-hh, +/-hh:mm]。例如,TO_ISO8601(1, “+00:00”)。
- 输入时间戳的精度由所查询表的精度确定,若未指定表,则精度为毫秒.
TO_JSON
TO_JSON(str_literal)
功能说明:将字符串常量转换为 JSON 类型。
返回结果数据类型:JSON。
适用数据类型:JSON 字符串,形如 ‘{ “literal” : literal }’。'{}'表示空值。键必须为字符串字面量,值可以为数值字面量、字符串字面量、布尔字面量或空值字面量。str_literal 中不支持转义符。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
TO_TIMESTAMP
TO_TIMESTAMP(ts_str_literal, format_str_literal)
功能说明:将字符串按照指定格式转化为时间戳.
版本:v3.2.2.0
返回结果数据类型:TIMESTAMP
应用字段:VARCHAR
嵌套子查询支持:适用于内层查询和外层查询
适用于:表和超级表
支持的格式:与to_char
相同
使用说明:
- 若
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
。- 如果同一字段被指定了多次,那么前面的指定将会被覆盖。如
to_timestamp('2023-22-10-10', 'yyyy-yy-MM-dd')
,输出年份是2022
。 - 为避免转换时使用了非预期的时区,推荐在时间中携带时区信息,例如’2023-10-10 10:10:10+08’,如果未指定时区则默认时区为服务端或客户端指定的时区。
- 如果没有指定完整的时间,那么默认时间值为指定或默认时区的
1970-01-01 00:00:00
,未指定部分使用该默认值中的对应部分。暂不支持只指定年日而不指定月日的格式,如 ‘yyyy-mm-DDD’,支持 ‘yyyy-mm-DD’。 - 如果格式串中有
AM
,PM
等,那么小时必须是12小时制,范围必须是01-12。 to_timestamp
转换具有一定的容错机制,在格式串和时间戳串不完全对应时,有时也可转换,如to_timestamp('200101/2', 'yyyyMM1/dd')
,格式串中多出来的 1 会被丢弃. 格式串与时间戳串中多余的空格字符(空格、tab 等)也会被 自动忽略。如to_timestamp(' 23 年 - 1 月 - 01 日 ', 'yy 年-MM月-dd日')
可以被成功转换。虽然MM
等字段需要两个数字对应(只有一位时前面补 0),在to_timestamp
时,一个数字也可以成功转换。- 输出时间戳的精度与查询表的精度相同,若查询未指定表,则输出精度为毫秒。如
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
。
TO_UNIXTIMESTAMP
TO_UNIXTIMESTAMP(expr [, return_timestamp])return_timestamp: {0| 1
}
功能说明:将日期时间格式的字符串转换成为时间戳。
返回结果数据类型:BIGINT、TIMESTAMP。
应用字段:VARCHAR、NCHAR。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 输入的日期时间字符串须符合 ISO8601/RFC3339 标准,无法转换的字符串格式将返回 NULL。
- 返回的时间戳精度与当前 DATABASE 设置的时间精度一致。
- return_timestamp 指定函数返回值是否为时间戳类型,设置为 1 时返回 TIMESTAMP 类型,设置为 0 时返回 BIGINT 类型。如不指定缺省返回 BIGINT 类型。
时间和日期函数
时间和日期函数对时间戳类型进行操作。
所有返回当前时间的函数,如 NOW、TODAY 和 TIMEZONE,在一条 SQL 语句中不论出现多少次都只会被计算一次。
DAYOFWEEK
DAYOFWEEK(expr)
功能说明:返回输入日期是周几。
版本:v3.3.3.0
返回结果类型:BIGINT。
适用数据类型:表示时间戳的 BIGINT、TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 返回值 1 代表周日,2 代表周一 … 7 代表周六
- 若
expr
为 NULL,返回 NULL。 - 输入时间戳的精度由所查询表的精度确定,若未指定表,则精度为毫秒。
举例:
taos> select dayofweek('2000-01-01');dayofweek('2000-01-01') |
==========================7 |
NOW
NOW()
功能说明:返回客户端当前系统时间。
返回结果数据类型:TIMESTAMP。
应用字段:在 WHERE 或 INSERT 语句中使用时只能作用于 TIMESTAMP 类型的字段。
适用于:表和超级表。
嵌套子查询支持:适用于内层查询和外层查询。
使用说明:
- 支持时间加减操作,如 NOW() + 1s,支持的时间单位如下:
b(纳秒)、u(微秒)、a(毫秒)、s(秒)、m(分)、h(小时)、d(天)、w(周)。 - 返回的时间戳精度与当前 DATABASE 设置的时间精度一致。
TIMEDIFF
TIMEDIFF(expr1, expr2 [, time_unit])
功能说明:返回时间戳 expr1
- expr2
的结果,结果可能为负,并近似到时间单位 time_unit
指定的精度。
返回结果类型:BIGINT。
适用数据类型:
expr1
:表示时间戳的 BIGINT、TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。expr2
:表示时间戳的 BIGINT、TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。time_unit
:见使用说明。- v3.3.3.0 之前该函数结果为时间戳
expr1
和expr2
的差值的绝对值,结果为正数。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 支持的时间单位
time_unit
如下:1b(纳秒)、1u(微秒)、1a(毫秒)、1s(秒)、1m(分)、1h(小时)、1d(天)、1w(周)。 - 如果时间单位
time_unit
未指定,返回的时间差值精度与当前 DATABASE 设置的时间精度一致。 - 输入包含不符合时间日期格式的字符串则返回 NULL。
expr1
或expr2
为 NULL,返回 NULL。time_unit
为 NULL,等同于未指定时间单位。- 输入时间戳的精度由所查询表的精度确定,若未指定表,则精度为毫秒.
举例:
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 |
TIMETRUNCATE
TIMETRUNCATE(expr, time_unit [, use_current_timezone])use_current_timezone: {0| 1
}
功能说明:将时间戳按照指定时间单位 time_unit 进行截断。
返回结果数据类型:TIMESTAMP。
应用字段:表示时间戳的 BIGINT、TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。
适用于:表和超级表。
使用说明:
- 支持的时间单位 time_unit 如下:
1b(纳秒)、1u(微秒)、1a(毫秒)、1s(秒)、1m(分)、1h(小时)、1d(天)、1w(周)。 - 返回的时间戳精度与当前 DATABASE 设置的时间精度一致。
- 输入时间戳的精度由所查询表的精度确定,若未指定表,则精度为毫秒.
- 输入包含不符合时间日期格式的字符串则返回 NULL。
- 当使用 1d/1w 作为时间单位对时间戳进行截断时,可通过设置 use_current_timezone 参数指定是否根据当前时区进行截断处理。
值 0 表示使用 UTC 时区进行截断,值 1 表示使用当前时区进行截断。
例如客户端所配置时区为 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’。
当不指定 use_current_timezone 时,use_current_timezone 默认值为 1。 - 当将时间值截断到一周(1w)时,timetruncate 的计算是基于 Unix 时间戳(1970年1月1日00:00:00 UTC)进行的。Unix 时间戳始于星期四,
因此所有截断后的日期都是星期四。
TIMEZONE
TIMEZONE()
功能说明:返回客户端当前时区信息。
返回结果数据类型:VARCHAR。
应用字段:无
适用于:表和超级表。
TODAY
TODAY()
功能说明:返回客户端当日零时的系统时间。
返回结果数据类型:TIMESTAMP。
应用字段:在 WHERE 或 INSERT 语句中使用时只能作用于 TIMESTAMP 类型的字段。
适用于:表和超级表。
使用说明:
- 支持时间加减操作,如 TODAY() + 1s,支持的时间单位如下:
b(纳秒)、u(微秒)、a(毫秒)、s(秒)、m(分)、h(小时)、d(天)、w(周)。 - 返回的时间戳精度与当前 DATABASE 设置的时间精度一致。
WEEK
WEEK(expr [, mode])
功能说明:返回输入日期的周数。
版本:v3.3.3.0
返回结果类型:BIGINT。
适用数据类型:
expr
:表示时间戳的 BIGINT、TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。mode
:0 - 7 之间的整数。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 若
expr
为 NULL,返回 NULL。 - 输入时间戳的精度由所查询表的精度确定,若未指定表,则精度为毫秒.
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 周 |
- 当返回值范围为 0 - 53 时,第 1 周之前的日期为第 0 周。
- 当返回值范围为 1 - 53 时,第 1 周之前的日期为上一年的最后一周。
- 以
2000-01-01
为例,- 在
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。
- 在
举例:
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
WEEKDAY(expr)
功能说明:返回输入日期是周几。
版本:v3.3.3.0
返回结果类型:BIGINT。
适用数据类型:表示时间戳的 BIGINT、TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 返回值 0 代表周一,1 代表周二 … 6 代表周日。
- 若
expr
为 NULL,返回 NULL。 - 输入时间戳的精度由所查询表的精度确定,若未指定表,则精度为毫秒。
举例:
taos> select weekday('2000-01-01');weekday('2000-01-01') |
========================5 |
WEEKOFYEAR
WEEKOFYEAR(expr)
功能说明:返回输入日期的周数。
版本:v3.3.3.0
返回结果类型:BIGINT。
适用数据类型:表示时间戳的 BIGINT、TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 等同于
WEEK(expr, 3)
,即在每周第一天是周一,返回值范围为 1 - 53,第一个包含四天及以上的周为第 1 周的条件下判断输入日期的周数。 - 若
expr
为 NULL,返回 NULL。 - 输入时间戳的精度由所查询表的精度确定,未指定表,则精度为毫秒。
举例:
taos> select weekofyear('2000-01-01');weekofyear('2000-01-01') |
===========================52 |
聚合函数
聚合函数为查询结果集的每一个分组返回单个结果行。可以由 GROUP BY 或窗口切分子句指定分组,如果没有,则整个查询结果集视为一个分组。
TDengine 支持针对数据的聚合查询。提供如下聚合函数。
APERCENTILE
APERCENTILE(expr, p [, algo_type])algo_type: {"default"| "t-digest"
}
功能说明:统计表/超级表中指定列的值的近似百分比分位数,与 PERCENTILE 函数相似,但是返回近似结果。
返回数据类型:DOUBLE。
适用数据类型:数值类型。
适用于:表和超级表。
说明:
- p 值范围是 [0,100],当为 0 时等同 于MIN,为 100 时等同于 MAX。
- algo_type 取值为 “default” 或 “t-digest”。输入为 “default” 时函数使用基于直方图算法进行计算。输入为 “t-digest” 时使用 t-digest 算法计算分位数的近似结果。如果不指定 algo_type 则使用 “default” 算法。
- t-digest 算法的近似结果对于输入数据顺序敏感,对超级表查询时不同的输入排序结果可能会有微小的误差。
AVG
AVG(expr)
功能说明:统计指定字段的平均值。
返回数据类型:DOUBLE。
适用数据类型:数值类型。
适用于:表和超级表。
COUNT
COUNT({* | expr})
功能说明:统计指定字段的记录行数。
返回数据类型:BIGINT。
适用数据类型:全部类型字段。
适用于:表和超级表。
使用说明:
- 可以使用星号 (*) 来替代具体的字段,使用星号 (*) 返回全部记录数量。
- 如果统计字段是具体的列,则返回该列中非 NULL 值的记录数量。
ELAPSED
ELAPSED(ts_primary_key [, time_unit])
功能说明:elapsed 函数表达了统计周期内连续的时间长度,和 twa 函数配合使用可以计算统计曲线下的面积。在通过 INTERVAL 子句指定窗口的情况下,统计在给定时间范围内的每个窗口内有数据覆盖的时间范围;如果没有 INTERVAL 子句,则返回整个给定时间范围内的有数据覆盖的时间范围。注意,ELAPSED 返回的并不是时间范围的绝对值,而是绝对值除以 time_unit 所得到的单位个数。流计算仅在 FORCE_WINDOW_CLOSE 模式下支持该函数。
返回结果类型:DOUBLE。
适用数据类型:TIMESTAMP。
适用于:表,超级表,嵌套查询的外层查询
说明:
- 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 等函数混合使用。
HISTOGRAM
HISTOGRAM(expr,bin_type, bin_description, normalized)
功能说明:统计数据按照用户指定区间的分布。
返回结果类型:如归一化参数 normalized 设置为 1,返回结果为 DOUBLE 类型,否则为 BIGINT 类型。
适用数据类型:数值型字段。
适用于:表和超级表。
详细说明:
- 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。
HYPERLOGLOG
HYPERLOGLOG(expr)
功能说明:
- 采用 hyperloglog 算法,返回某列的基数。该算法在数据量很大的情况下,可以明显降低内存的占用,求出来的基数是个估算值,标准误差(标准误差是多次实验,每次的平均数的标准差,不是与真实结果的误差)为 0.81%。
- 在数据量较少的时候该算法不是很准确,可以使用
select count(data) from (select unique(col) as data from table)
的方法。
返回结果类型:INTEGER。
适用数据类型:任何类型。
适用于:表和超级表。
LEASTSQUARES
LEASTSQUARES(expr, start_val, step_val)
功能说明:统计表中某列的值的拟合直线方程。start_val 是自变量初始值,step_val 是自变量的步长值。
返回数据类型:字符串表达式(斜率、截距)。
适用数据类型:expr 必须是数值类型。
适用于:表。
PERCENTILE
PERCENTILE(expr, p [, p1] ... )
功能说明:统计表中某列的值百分比分位数。
返回数据类型:该函数最小参数个数为 2 个,最大参数个数为 11 个。可以最多同时返回 10 个百分比分位数。当参数个数为 2 时,返回一个分位数,类型为DOUBLE,当参数个数大于 2 时,返回类型为VARCHAR,格式为包含多个返回值的JSON数组。
应用字段:数值类型。
适用于:表。
使用说明:
- 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
。
SPREAD
SPREAD(expr)
功能说明:统计表中某列的最大值和最小值之差。
返回数据类型:DOUBLE。
适用数据类型:INTEGER、TIMESTAMP。
适用于:表和超级表。
STDDEV/STDDEV_POP
STDDEV/STDDEV_POP(expr)
功能说明:统计表中某列的总体标准差。
返回数据类型:DOUBLE。
适用数据类型:数值类型。
适用于:表和超级表。
说明:
STDDEV_POP
函数等价于STDDEV
函数,从 v3.3.3.0 开始支持。
举例:
taos> select id from test_stddev;id |
==============1 |2 |3 |4 |5 |taos> select stddev_pop(id) from test_stddev;stddev_pop(id) |
============================1.414213562373095 |
SUM
SUM(expr)
功能说明:统计表/超级表中某列的和。
返回数据类型:DOUBLE、BIGINT。
适用数据类型:数值类型。
适用于:表和超级表。
VAR_POP
VAR_POP(expr)
功能说明:统计表中某列的总体方差。
版本:v3.3.3.0
返回数据类型:DOUBLE。
适用数据类型:数值类型。
适用于:表和超级表。
举例:
taos> select id from test_var;id |
==============3 |1 |2 |4 |5 |taos> select var_pop(id) from test_var;var_pop(id) |
============================2.000000000000000 |
选择函数
选择函数根据语义在查询结果集中选择一行或多行结果返回。用户可以同时指定输出 ts 列或其他列(包括 tbname 和标签列),这样就可以方便地知道被选出的值是源于哪个数据行的。
BOTTOM
BOTTOM(expr, k)
功能说明:统计表/超级表中某列的值最小 k 个非 NULL 值。如果多条数据取值一样,全部取用又会超出 k 条限制时,系统会从相同值中随机选取符合要求的数量返回。
返回数据类型:同应用的字段。
适用数据类型:数值类型。
适用于:表和超级表。
使用说明:
- k 值取值范围 1≤k≤100;
- 系统同时返回该记录关联的时间戳列;
- 限制:BOTTOM 函数不支持 FILL 子句。
FIRST
FIRST(expr)
功能说明:统计表/超级表中某列的值最先写入的非 NULL 值。
返回数据类型:同应用的字段。
适用数据类型:所有字段。
适用于:表和超级表。
使用说明:
- 如果要返回各个列的首个(时间戳最小)非 NULL 值,可以使用 FIRST(*);查询超级表,且 multiResultFunctionStarReturnTags 设置为 0 (默认值) 时,FIRST(*) 只返回超级表的普通列;设置为 1 时,返回超级表的普通列和标签列。
- 如果结果集中的某列全部为 NULL 值,则该列的返回结果也是 NULL;
- 如果结果集中所有列全部为 NULL 值,则不返回结果。
- 对于存在复合主键的表的查询,若最小时间戳的数据有多条,则只有对应的复合主键最小的数据被返回。
INTERP
INTERP(expr [, ignore_null_values])ignore_null_values: {0| 1
}
功能说明:返回指定时间截面指定列的记录值或插值。ignore_null_values 参数的值可以是 0 或 1,为 1 时表示忽略 NULL 值,缺省值为 0。
返回数据类型:同字段类型。
适用数据类型:数值类型。
适用于:表和超级表。
使用说明
- INTERP 用于在指定时间断面获取指定列的记录值,如果该时间断面不存在符合条件的行数据,那么会根据 FILL 参数的设定进行插值。
- INTERP 的输入数据为指定列的数据,可以通过条件语句(where 子句)来对原始列数据进行过滤,如果没有指定过滤条件则输入为全部数据。
- INTERP SQL 查询需要同时与 RANGE、EVERY 和 FILL 关键字一起使用;流计算不能使用 RANGE,需要 EVERY 和 FILL 关键字一起使用。
- INTERP 的输出时间范围根据 RANGE(timestamp1, timestamp2) 字段来指定,需满足 timestamp1 <= timestamp2。其中 timestamp1 为输出时间范围的起始值,即如果 timestamp1 时刻符合插值条件则 timestamp1 为输出的第一条记录,timestamp2 为输出时间范围的结束值,即输出的最后一条记录的 timestamp 不能大于 timestamp2。
- INTERP 根据 EVERY(time_unit) 字段来确定输出时间范围内的结果条数,即从 timestamp1 开始每隔固定长度的时间(time_unit 值)进行插值,time_unit 可取值时间单位:1a(毫秒)、1s(秒)、1m(分)、1h(小时)、1d(天)、1w(周)。例如 EVERY(500a) 将对于指定数据每500毫秒间隔进行一次插值。
- INTERP 根据 FILL 字段来决定在每个符合输出条件的时刻如何进行插值。关于 FILL 子句如何使用请参考 FILL 子句
- INTERP 可以在 RANGE 字段中只指定唯一的时间戳对单个时间点进行插值,在这种情况下,EVERY 字段可以省略。例如
SELECT INTERP(col) FROM tb RANGE('2023-01-01 00:00:00') FILL(linear)
。 - INTERP 作用于超级表时,会将该超级表下的所有子表数据按照主键列排序后进行插值计算,也可以搭配 PARTITION BY tbname 使用,将结果强制规约到单个时间线。
- INTERP 可以与伪列 _irowts 一起使用,返回插值点所对应的时间戳(v3.0.2.0 以后支持)。
- INTERP 可以与伪列 _isfilled 一起使用,显示返回结果是否为原始记录或插值算法产生的数据(v3.0.3.0 以后支持)。
- INTERP 对于带复合主键的表的查询,若存在相同时间戳的数据,则只有对应的复合主键最小的数据参与运算。
- INTERP 查询支持 NEAR FILL 模式,即当需要 FILL 时,使用距离当前时间点最近的数据进行插值,当前后时间戳与当前时间断面一样近时,FILL 前一行的值. 此模式在流计算中和窗口查询中不支持。例如
SELECT INTERP(col) FROM tb RANGE('2023-01-01 00:00:00', '2023-01-01 00:10:00') FILL(NEAR)
(v3.3.4.9 及以后支持)。 - INTERP 只有在使用 FILL PREV/NEXT/NEAR 模式时才可以使用伪列
_irowts_origin
。_irowts_origin
在 v3.3.4.9 及以后支持。 - INTERP
RANGE
子句支持时间范围的扩展(v3.3.4.9 及以后支持),如RANGE('2023-01-01 00:00:00', 10s)
表示在时间点 ‘2023-01-01 00:00:00’ 查找前后 10s 的数据进行插值,FILL PREV/NEXT/NEAR 分别表示从时间点向前/向后/前后查找数据,若时间点周围没有数据,则使用 FILL 指定的值进行插值,因此此时 FILL 子句必须指定值。例如SELECT INTERP(col) FROM tb RANGE('2023-01-01 00:00:00', 10s) FILL(PREV, 1)
。目前仅支持时间点和时间范围的组合,不支持时间区间和时间范围的组合,即不支持RANGE('2023-01-01 00:00:00', '2023-02-01 00:00:00', 1h)
。所指定的时间范围规则与 EVERY 类似,单位不能是年或月,值不能为 0,不能带引号。使用该扩展时,不支持除FILL PREV/NEXT/NEAR
外的其他 FILL 模式,且不能指定 EVERY 子句。
LAST
LAST(expr)
功能说明:统计表/超级表中某列的值最后写入的非 NULL 值。
返回数据类型:同应用的字段。
适用数据类型:所有字段。
适用于:表和超级表。
使用说明:
- 如果要返回各个列的最后(时间戳最大)一个非 NULL 值,可以使用 LAST(*);查询超级表,且 multiResultFunctionStarReturnTags 设置为 0 (默认值) 时,LAST(*) 只返回超级表的普通列;设置为 1 时,返回超级表的普通列和标签列。
- 如果结果集中的某列全部为 NULL 值,则该列的返回结果也是 NULL;如果结果集中所有列全部为 NULL 值,则不返回结果。
- 在用于超级表时,时间戳完全一样且同为最大的数据行可能有多个,那么会从中随机返回一条,而并不保证多次运行所挑选的数据行必然一致。
- 对于存在复合主键的表的查询,若最大时间戳的数据有多条,则只有对应的复合主键最大的数据被返回。
LAST_ROW
LAST_ROW(expr)
功能说明:返回表/超级表的最后一条记录。
返回数据类型:同应用的字段。
适用数据类型:所有字段。
适用于:表和超级表。
使用说明:
- 如果要返回各个列的最后一条记录(时间戳最大),可以使用 LAST_ROW(*);查询超级表,且 multiResultFunctionStarReturnTags 设置为 0 (默认值) 时,LAST_ROW(*) 只返回超级表的普通列;设置为 1 时,返回超级表的普通列和标签列。
- 在用于超级表时,时间戳完全一样且同为最大的数据行可能有多个,那么会从中随机返回一条,而并不保证多次运行所挑选的数据行必然一致。
- 不能与 INTERVAL 一起使用。
- 与 LAST 函数一样,对于存在复合主键的表的查询,若最大时间戳的数据有多条,则只有对应的复合主键最大的数据被返回。
MAX
MAX(expr)
功能说明:统计表/超级表中某列的值最大值。
返回数据类型:同应用的字段。
适用数据类型:数值类型、VARCHAR、NCHAR。
适用于:表和超级表。
使用说明:
- max 函数可以接受字符串作为输入参数,当输入参数为字符串类型时,返回最大的字符串值,从 v3.3.3.0 开始支持,之前的版本不支持字符串参数。
MIN
MIN(expr)
功能说明:统计表/超级表中某列的值最小值。
返回数据类型:同应用的字段。
适用数据类型:数值类型、VARCHAR、NCHAR。
适用于:表和超级表。
使用说明:
- min 函数可以接受字符串作为输入参数,当输入参数为字符串类型时,返回最大的字符串值,从 v3.3.3.0 开始支持,之前的版本不支持字符串参数。
MODE
MODE(expr)
功能说明:返回出现频率最高的值,若存在多个频率相同的最高值,则随机输出其中某个值。
返回数据类型:与输入数据类型一致。
适用数据类型:全部类型字段。
适用于:表和超级表。
SAMPLE
SAMPLE(expr, k)
功能说明:获取数据的 k 个采样值。参数 k 的合法输入范围是 1≤ k ≤ 1000。
返回结果类型:同原始数据类型。
适用数据类型:全部类型字段。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
TAIL
TAIL(expr, k [, offset_rows])
功能说明:返回跳过最后 offset_val 个,然后取连续 k 个记录,不忽略 NULL 值。offset_val 可以不输入。此时返回最后的 k 个记录。当有 offset_val 输入的情况下,该函数功能等效于 order by ts desc LIMIT k OFFSET offset_val
。
参数范围:k: [1,100] offset_val: [0,100]。
返回数据类型:同应用的字段。
适用数据类型:适合于除时间主键列外的任何类型。
适用于:表、超级表。
TOP
TOP(expr, k)
功能说明:统计表/超级表中某列的值最大 k 个非 NULL 值。如果多条数据取值一样,全部取用又会超出 k 条限制时,系统会从相同值中随机选取符合要求的数量返回。
返回数据类型:同应用的字段。
适用数据类型:数值类型。
适用于:表和超级表。
使用说明:
- k 值取值范围 1≤k≤100;
- 系统同时返回该记录关联的时间戳列;
- 限制:TOP 函数不支持 FILL 子句。
UNIQUE
UNIQUE(expr)
功能说明:返回该列数据去重后的值。该函数功能与 distinct 相似。对于相同的数据,返回时间戳最小的一条,对于存在复合主键的表的查询,若最小时间戳的数据有多条,则只有对应的复合主键最小的数据被返回。
返回数据类型:同应用的字段。
适用数据类型:全部类型字段。
适用于:表和超级表。
时序数据特有函数
时序数据特有函数是 TDengine 为了满足时序数据的查询场景而量身定做出来的。在通用数据库中,实现类似功能通常需要复杂的查询语法,且效率很低。TDengine 以函数的方式内置了这些功能,最大程度的减轻了用户的使用成本。
CSUM
CSUM(expr)
功能说明:累加和(Cumulative sum),忽略 NULL 值。
返回结果类型:输入列如果是整数类型返回值为长整型(bigint),浮点数返回值为双精度浮点数(double)。无符号整数类型返回值为无符号长整型(unsigned bigint)。
适用数据类型:数值类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 不支持 +、-、*、/ 运算,如 csum(col1) + csum(col2)。
- 只能与聚合(Aggregation)函数一起使用。该函数可以应用在普通表和超级表上。
DERIVATIVE
DERIVATIVE(expr, time_interval, ignore_negative)ignore_negative: {0| 1
}
功能说明:统计表中某列数值的单位变化率。其中单位时间区间的长度可以通过 time_interval 参数指定,最小可以是 1 秒(1s);ignore_negative 参数的值可以是 0 或 1,为 1 时表示忽略负值。对于存在复合主键的表的查询,若时间戳相同的数据存在多条,则只有对应的复合主键最小的数据参与运算。
返回数据类型:DOUBLE。
适用数据类型:数值类型。
适用于:表和超级表。
使用说明:
- 可以与选择相关联的列一起使用。例如
select \_rowts, DERIVATIVE(col1, 1s, 1) from tb1
。
DIFF
DIFF(expr [, ignore_option])ignore_option: {0| 1| 2| 3
}
功能说明:统计表中特定列与之前行的当前列有效值之差。ignore_option 取值为 0|1|2|3,可以不填,默认值为 0.
0
表示不忽略(diff结果)负值不忽略 null 值1
表示(diff结果)负值作为 null 值2
表示不忽略(diff结果)负值但忽略 null 值3
表示忽略(diff结果)负值且忽略 null 值- 对于存在复合主键的表的查询,若时间戳相同的数据存在多条,则只有对应的复合主键最小的数据参与运算。
返回数据类型:bool、时间戳及整型数值类型均返回 bigint,浮点类型返回 double,若 diff 结果溢出则返回溢出后的值。
适用数据类型:数值类型、时间戳和 bool 类型。
适用于:表和超级表。
使用说明:
- diff 是计算本行特定列与同列的前一个有效数据的差值,同列的前一个有效数据:指的是同一列中时间戳较小的最临近的非空值。
- 数值类型 diff 结果为对应的算术差值;时间戳类型根据数据库的时间戳精度进行差值计算;bool 类型计算差值时 true 视为 1,false 视为 0
- 如当前行数据为 null 或者没有找到同列前一个有效数据时,diff 结果为 null
- 忽略负值时(ignore_option 设置为 1 或 3 ),如果 diff 结果为负值,则结果设置为 null,然后根据 null 值过滤规则进行过滤
- 当 diff 结果发生溢出时,结果是否是
应该忽略的负值
取决于逻辑运算结果是正数还是负数,例如 9223372036854775800 - (-9223372036854775806) 的值超出 BIGINT 的范围,diff 结果会显示溢出值 -10,但并不会被作为负值忽略 - 单个语句中可以使用单个或者多个 diff,并且每个 diff 可以指定相同或不同的 ignore_option,当单个语句中存在多个 diff 时当且仅当某行所有 diff 的结果都为 null,并且 ignore_option 都设置为忽略 null 值,该行才从结果集中剔除
- 可以选择与相关联的列一起使用。例如
select _rowts, DIFF() from
。 - 当没有复合主键时,如果不同的子表有相同时间戳的数据,会提示 “Duplicate timestamps not allowed”
- 当使用复合主键时,不同子表的时间戳和主键组合可能相同,使用哪一行取决于先找到哪一行,这意味着在这种情况下多次运行 diff() 的结果可能会不同。
IRATE
IRATE(expr)
功能说明:计算瞬时增长率。使用时间区间中最后两个样本数据来计算瞬时增长速率;如果这两个值呈递减关系,那么只取最后一个数用于计算,而不是使用二者差值。对于存在复合主键的表的查询,若时间戳相同的数据存在多条,则只有对应的复合主键最小的数据参与运算。
返回数据类型:DOUBLE。
适用数据类型:数值类型。
适用于:表和超级表。
MAVG
MAVG(expr, k)
功能说明:计算连续 k 个值的移动平均数(moving average)。如果输入行数小于 k,则无结果输出。参数 k 的合法输入范围是 1≤ k ≤ 1000。
返回结果类型:DOUBLE。
适用数据类型:数值类型。
嵌套子查询支持:适用于内层查询和外层查询。
适用于:表和超级表。
使用说明:
- 不支持 +、-、*、/ 运算,如 mavg(col1, k1) + mavg(col2, k1);
- 只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用;
STATECOUNT
STATECOUNT(expr, oper, val)
功能说明:返回满足某个条件的连续记录的个数,结果作为新的一列追加在每行后面。条件根据参数计算,如果条件为 true 则加 1,条件为 false 则重置为-1,如果数据为 NULL,跳过该条数据。
参数范围:
- oper:“LT” (小于)、“GT”(大于)、“LE”(小于等于)、“GE”(大于等于)、“NE”(不等于)、“EQ”(等于),不区分大小写。
- val:数值型
返回结果类型:INTEGER。
适用数据类型:数值类型。
嵌套子查询支持:不支持应用在子查询上。
适用于:表和超级表。
使用说明:
- 不能和窗口操作一起使用,例如
interval/state_window/session_window
。
STATEDURATION
STATEDURATION(expr, oper, val, unit)
功能说明:返回满足某个条件的连续记录的时间长度,结果作为新的一列追加在每行后面。条件根据参数计算,如果条件为 true 则加上两个记录之间的时间长度(第一个满足条件的记录时间长度记为 0),条件为 false 则重置为-1,如果数据为 NULL,跳过该条数据。
参数范围:
- oper:
'LT'
(小于)、'GT'
(大于)、'LE'
(小于等于)、'GE'
(大于等于)、'NE'
(不等于)、'EQ'
(等于),不区分大小写,但需要用''
包括。 - val:数值型
- unit:时间长度的单位,可取值时间单位:1b(纳秒)、1u(微秒)、1a(毫秒)、1s(秒)、1m(分)、1h(小时)、1d(天)、1w(周)。如果省略,默认为当前数据库精度。
返回结果类型:INTEGER。
适用数据类型:数值类型。
嵌套子查询支持:不支持应用在子查询上。
适用于:表和超级表。
使用说明:
- 不能和窗口操作一起使用,例如 interval/state_window/session_window。
TWA
TWA(expr)
功能说明:时间加权平均函数。统计表中某列在一段时间内的时间加权平均。对于存在复合主键的表的查询,若时间戳相同的数据存在多条,则只有对应的复合主键最小的数据参与运算。流计算仅在 FORCE_WINDOW_CLOSE 模式下支持该函数。
返回数据类型:DOUBLE。
适用数据类型:数值类型。
适用于:表和超级表。
系统信息函数
CLIENT_VERSION
SELECT CLIENT_VERSION();
说明:返回客户端版本。
CURRENT_USER
SELECT CURRENT_USER();
说明:获取当前用户。
DATABASE
SELECT DATABASE();
说明:返回当前登录的数据库。如果登录的时候没有指定默认数据库,且没有使用USE命令切换数据库,则返回NULL。
SERVER_STATUS
SELECT SERVER_STATUS();
说明:检测服务端是否所有 dnode 都在线,如果是则返回成功,否则返回无法建立连接的错误。如果想要查询集群的状态,推荐使用 SHOW CLUSTER ALIVE
与 SELECT SERVER_STATUS()
不同,当集群中的部分节点不可用时,它不会返回错误,而是返回不同的状态码,详见:SHOW CLUSTER ALIVE
SERVER_VERSION
SELECT SERVER_VERSION();
说明:返回服务端版本。
Geometry 函数
Geometry 输入函数
ST_GeomFromText
ST_GeomFromText(VARCHAR WKT expr)
功能说明:根据 Well-Known Text (WKT) 表示从指定的几何值创建几何数据。
返回值类型:GEOMETRY。
适用数据类型:VARCHAR。
适用表类型:标准表和超表。
使用说明:输入可以是 WKT 字符串之一,例如点(POINT)、线串(LINESTRING)、多边形(POLYGON)、多点集(MULTIPOINT)、多线串(MULTILINESTRING)、多多边形(MULTIPOLYGON)、几何集合(GEOMETRYCOLLECTION)。输出是以二进制字符串形式定义的 GEOMETRY 数据类型。
Geometry 输出函数
ST_AsText
ST_AsText(GEOMETRY geom)
功能说明:从几何数据中返回指定的 Well-Known Text (WKT) 表示。
返回值类型:VARCHAR。
适用数据类型:GEOMETRY。
适用表类型:标准表和超表。
使用说明:输出可以是 WKT 字符串之一,例如点(POINT)、线串(LINESTRING)、多边形(POLYGON)、多点集(MULTIPOINT)、多线串(MULTILINESTRING)、多多边形(MULTIPOLYGON)、几何集合(GEOMETRYCOLLECTION)。
Geometry 关系函数
ST_Contains
ST_Contains(GEOMETRY geomA, GEOMETRY geomB)
功能说明:如果 A 包含 B,描述:如果几何形状 A 包含几何形状 B,则返回 TRUE。
返回值类型:BOOL。
适用数据类型:GEOMETRY、GEOMETRY。
适用表类型:标准表和超表。
使用说明:A 包含 B 当且仅当 B 的所有点位于 A 的内部(即位于内部或边界上)(或等效地,B 的没有点位于 A 的外部),并且 A 和 B 的内部至少有一个公共点。
ST_ContainsProperly
ST_ContainsProperly(GEOMETRY geomA, GEOMETRY geomB)
功能说明:如果 B 的每个点都位于 A 内部,则返回 TRUE。
返回值类型:BOOL。
适用数据类型:GEOMETRY、GEOMETRY。
适用表类型:标准表和超表。
使用说明:B 的没有点位于 A 的边界或外部。
ST_Covers
ST_Covers(GEOMETRY geomA, GEOMETRY geomB)
功能说明:如果 B 中的每个点都位于几何形状 A 内部(与内部或边界相交),则返回 TRUE。
返回值类型:BOOL。
适用数据类型:GEOMETRY、GEOMETRY。
适用表类型:标准表和超表。
使用说明:A 包含 B 意味着 B 中的没有点位于 A 的外部(在外部)。
ST_Equals
ST_Equals(GEOMETRY geomA, GEOMETRY geomB)
功能说明:如果给定的几何对象是"空间相等"的,则返回 TRUE。
返回值类型:BOOL。
适用数据类型:GEOMETRY、GEOMETRY。
适用表类型:标准表和超表。
使用说明:"空间相等"意味着 ST_Contains(A,B) = true 和 ST_Contains(B,A) = true,并且点的顺序可能不同,但表示相同的几何结构。
ST_Intersects
ST_Intersects(GEOMETRY geomA, GEOMETRY geomB)
##功能说明**:比较两个几何对象,并在它们相交时返回 true。
返回值类型:BOOL。
适用数据类型:GEOMETRY、GEOMETRY。
适用表类型:标准表和超表。
使用说明:如果两个几何对象有任何一个共享点,则它们相交。
ST_Touches
ST_Touches(GEOMETRY geomA, GEOMETRY geomB)
功能说明:如果 A 和 B 相交,但它们的内部不相交,则返回 TRUE。
返回值类型:BOOL。
适用数据类型:GEOMETRY、GEOMETRY。
适用表类型:标准表和超表。
使用说明:A 和 B 至少有一个公共点,并且这些公共点位于至少一个边界中。对于点/点输入,关系始终为 FALSE,因为点没有边界。
访问官网
更多内容欢迎访问 TDengine 官网
相关文章:
TDengine SQL 函数
单行函数 数学函数 ABSACOSASINATANCEILCOSDEGREESEXPFLOORGREATESTLEASTLNLOGMODPIPOWRADIANSRANDROUNDSIGNSINSQRTTANTRUNCATE 字符串函数 ASCIICHARCHAR_LENGTHCONCATCONCAT_WSLENGTHLOWERLTRIMPOSITIONREPEATREPLACERTRIMSUBSTRING/SUBSTRSUBSTRING_INDEXTRIMUPPER 转换函数…...
智能三防手持终端破解传统仓储效率困局
在数字化浪潮的推动下,传统仓储管理模式正面临效率低、成本高、错误频发等瓶颈。如何实现精准、高效、智能化的仓储管理,上海岳冉三防智能手持终端机以RFID技术为核心,结合工业级三防(防水、防摔、防尘)设计࿰…...
力扣——K个一组翻转链表
题目链接: 链接 题目描述: 思路: 可以理解为把原链表的每一段进行反转 把链表的每一段看成新链表,单独进行反转,然后再放回原链表 关键是截取k个节点、进行反转后,怎么再和原链表链接起来 我们把截取的…...
5-27 临摹大师-IP-Adapter
前言: 前一节我们主要介绍ControlNet中如何对黑白照片进行上色 主要介绍ControlNet中的IP-Adapter。这个也是一种类似的风格借鉴,类似Reference的能力。 当然IP-Adapter有两点或许可以吸引我们,一个是国人腾讯公司制作的。另一个在速度和效…...
MinIO的预签名直传机制
我们传统使用MinIo做OSS对象存储的应用方式往往都是在后端配置与MinIO的连接和文件上传下载的相关接口,然后我们在前端调用这些接口完成文件的上传下载机制,但是,当并发量过大,频繁访问会对后端的并发往往会对服务器造成极大的压力…...
树莓科技集团董事长:第五代产业园运营模式的深度剖析与展望
第五代产业园运营模式,以创新为核心驱动,强调数字化、网络化和资源整合。树莓科技集团在这一领域具有代表性,其运营模式值得深入剖析。 核心特征 数字化转型:第五代产业园高度重视数字化技术的应用,通过构建数字化平…...
项目组织管理类型-职能式组织和矩阵式组织的区别
在职能式组织和矩阵式组织中,任务分配和人员安排确实有显著的不同,让我们通过以下例子来进一步解释: 职能式组织在职能式组织中,任务通常是根据部门的职能进行下达的。 例如,一家制造公司的组织结构如下: …...
树莓科技(成都)集团:如何铸就第五代产业园标杆
树莓科技(成都)集团铸就第五代产业园标杆,主要体现在以下几个方面: 精准定位与前瞻布局 树莓科技并非盲目扩张,而是精准锚定数字经济发展方向。以成都为起点,迅速构建起全国性的园区版图,体现…...
【Quest开发】手柄交互震动
软件:Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72(要提前导入哦) 硬件:Meta Quest3 参考Meta开发文档:https://developers.meta.com/horizon/documentation/unity/unity-haptics-sdk-integrate 这篇官…...
《Transformer如何进行图像分类:从新手到入门》
引言 如果你对人工智能(AI)或深度学习(Deep Learning)感兴趣,可能听说过“Transformer”这个词。它最初在自然语言处理(NLP)领域大放异彩,比如在翻译、聊天机器人和文本生成中表现出…...
数字图像处理与Python语言实现-Box模糊CUDA实现
Box模糊CUDA实现 文章目录 Box模糊CUDA实现1、Box模糊的基本原理2、算法优化:滑动窗口技术3、参数对模糊效果的影响4、Box模糊的优缺点5、与高斯模糊的对比6、实际应用场景7、算法实现7.1 PyCUDA实现7.2 CuPy实现7.3 C++与CUDA实现8、总结在图像处理领域,**Box模糊(方框模糊…...
MAVEN解决版本依赖冲突
文章目录 一、依赖冲突概念1、什么是依赖冲突2、依赖冲突的原因3、如何解决依赖冲突 二、查看依赖冲突-maven-helper1、安装2、helper使用1、conflicts的阅读顺序(从下向上看)2、dependencies as List的阅读顺序(从下向上看)3、de…...
Compose 实践与探索五 —— AnimationSpec
不论是 animateXxxAsState() 还是 Animatable 的 animateTo() 都可以传入 AnimationSpec 以配置动画的规格: Composable fun animateDpAsState(targetValue: Dp,animationSpec: AnimationSpec<Dp> dpDefaultSpring,label: String "DpAnimation",…...
Embedding模型到底是什么?
嵌入模型(Embedding Model)是一种将高维数据映射到低维空间的工具,广泛应用于自然语言处理(NLP)、推荐系统和图像识别等领域。它的核心目标是将复杂的数据(如文本、图像或用户行为)转换为稠密的…...
数据结构(一)——绪论
一、数据结构的研究内容 1.数据的各种逻辑结构和物理结构,以及他们之间的相应关系 2.存储结构的方法,对每种结构定义相适应的各种运算 3.设计出相应的算法 4.分析算法的效率 二、数据结构的基本概念 1.数据(data):…...
VMware虚拟机网络连接模式介绍以及nat模式访问公网实践
在 VMware 虚拟机中,网络配置是非常重要的一部分。VMware 提供了三种主要的网络连接模式,分别是桥接模式(Bridged)、NAT模式(NAT) 和仅主机模式(Host-Only)。每种模式都有其特定的用…...
Selenium Manager和webdriver manager的区别与联系
一、引言 1.1 自动化测试的重要性 在现代软件开发流程中,自动化测试已经成为保证软件质量和提高交付效率的关键实践。随着软件开发周期的缩短和软件复杂性的增加,手工测试已无法满足快速迭代的需求。自动化测试能够快速、准确地执行重复性测试任务&…...
八叉树地图的原理与实现
八叉树与体素图 八叉树地图 八叉树地图是可变分辨率的三维栅格地图,可以自由调整分辨率,如下所示: 根据点云的数量或密度决定每个叶子方块是否被占据 体素图 体素就是固定分辨率的三维栅格地图,如下所示: 根据点云…...
DeepSeek模型本地化部署方案及Python实现
DeepSeek实在是太火了,虽然经过扩容和调整,但反应依旧不稳定,甚至小圆圈转半天最后却提示“服务器繁忙,请稍后再试。” 故此,本文通过讲解在本地部署 DeepSeek并配合python代码实现,让你零成本搭建自己的AI…...
【Linux】浅谈冯诺依曼和进程
一、冯诺依曼体系结构 冯诺依曼由 输入设备、输出设备、运算器、控制器、存储器 五部分组成。 冯诺依曼的设计特点 二进制表示 所有数据(包括程序指令)均以二进制形式存储和运算,简化了硬件逻辑设计,提高了可靠性。 存储程序原理…...
基于深度学习的多模态人脸情绪识别研究与实现(视频+图像+语音)
这是一个结合图像和音频的情绪识别系统,从架构、数据准备、模型实现、训练等。包括数据收集、预处理、模型训练、融合方法、部署优化等全流程。确定完整系统的组成部分:数据收集与处理、模型设计与训练、多模态融合、系统集成、部署优化、用户界面等。详…...
【蓝桥杯】第15届c++B组--R格式
问题描述 小蓝最近在研究一种浮点数的表示方法:RR 格式。对于一个大于 0 的浮点数 dd,可以用 RR 格式的整数来表示。给定一个转换参数 nn,将浮点数转换为 RR 格式整数的做法是: 将浮点数乘以 2n2n; 四舍五入到最接近的整数。 …...
【初阶三】认识C语言—下
【初阶三】认识C语言—下 1.函数2.数组3.操作符3.1算数操作符3.2移位操作符和位操作符3.3赋值操作符3.4单目操作符 4.常见关键字4.1关键字typedef4.2 关键字static 5. define定义常宏6.指针6.1内存6.2取地址操作符& 7.结构体 1.函数 函数就像一个工厂,通过输入原…...
【C#】使用DeepSeek帮助评估数据库性能问题,C# 使用定时任务,每隔一分钟移除一次表,再重新创建表,和往新创建的表追加5万多条记录
🌹欢迎来到《小5讲堂》🌹 🌹这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。🌹 🌹温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!&#…...
前端学习笔记(三)——ant-design vue表单传递数据到父页面
前言 善用AI,快速解决定位 原理 a-form所在的SFC(单文件)vue中需要将表单数据传递给父页面SFC文件中,使用emit方法 代码 子组件(Form.vue) <template><a-form submit"handleSubmit&qu…...
计算机视觉算法实战——驾驶员玩手机检测(主页有源码)
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 1. 领域简介:玩手机检测的重要性与技术挑战 驾驶员玩手机检测是智能交通安全领域的核心课题。根据NHTSA数据࿰…...
C语言(23)
字符串函数 11.strstr函数 1.1函数介绍: 头文件:string.h char *strstr ( const char * str1,const char *str2); 作用:在一个字符串(str1)中寻找另外一个字符串(str2)是否出现过 如果找到…...
Python入门教程:从零开始学习Python编程
引言 Python是一种高级编程语言,因其简洁的语法和强大的功能而广受欢迎。无论你是编程新手,还是有经验的开发者,Python都是一个非常好的选择。本文将带你从零开始学习Python编程,涵盖基础语法、常用库以及一些实用的编程技巧。 目…...
SAIL-RK3576核心板应用方案——无人机视觉定位与地面无人设备通信控制方案
本方案以 EFISH-RK3576-SBC工控板 或 SAIL-RK3576核心板 为核心,结合高精度视觉定位、实时通信与智能控制技术,实现无人机与地面无人设备的协同作业。方案适用于物流巡检、农业植保、应急救援等场景,具备高精度定位、低延迟通信与强环境适应性…...
14.C语言const的使用规范,详细说明
目录 修饰变量 修饰指针 指向常量的指针 常量指针 指向常量的常量指针 修饰函数参数 修饰函数返回值 总结 在 C 语言里,const 是一个类型限定符,它的作用是将变量定义为只读,也就是不允许对其值进行修改,用来修饰函数中的…...
安装操作系统ubuntu-20.04.6-live-server-amd64
一、下载虚拟机软件、远程控制软件及操作系统镜像 下载VMware Workstation: 下载 VMware Workstation Pro 个人免费版(可能会访问不了,那就随便找个能下载的版本安装)下载XShell: XShell 家庭/学校免费版下载ubuntu操作系统 ubuntu-20.04.6-…...
使用 PaddleNLP 在 CPU(支持 AVX 指令)下跑通 llama2-7b或DeepSeek-r1:1.5b 模型(完成度80%)
原文:🚣♂️ 使用 PaddleNLP 在 CPU(支持 AVX 指令)下跑通 llama2-7b 模型 🚣 — PaddleNLP 文档 使用 PaddleNLP 在 CPU(支持 AVX 指令)下跑通 llama2-7b 模型 🚣 PaddleNLP 在支持 AVX 指令的 CPU 上对 llama 系列模型进行了…...
【Golang】第五弹----函数
笔上得来终觉浅,绝知此事要躬行 🔥 个人主页:星云爱编程 🔥 所属专栏:Golang 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 一、函数 1.1基本介绍…...
适合二次开发的Web组态软件推荐
在选择适合二次开发的Web组态软件时,需要考虑多个因素,包括开源与否、功能、社区支持、文档完整性等。以下是一些适合二次开发的Web组态软件: 1. Node-RED 简介: Node-RED 是一个基于流的编程工具,最初由IBM开发,现为…...
三、Docker 集群管理与应用
(一)项目案例 1、准备主机 (1)关闭防火墙,或者开放TCP端口2377(用于集群管理通信)、TCP/UPD端口7946(用于节点之间的通信)、UDP端口4789(用于overlay网络流…...
Spring 注解解析
一、Import 1、核心作用 Import 是 Spring 模块化配置的核心注解,用于将外部配置类、组件或动态逻辑导入当前 Spring 上下文。其核心功能包括: 配置类聚合:整合多个分散的 Configuration 类,解决大型项目中配置分散的问题。动态…...
DeepSeek-R1思路训练多模态大模型-Vision-R1开源及实现方法思路
刚开始琢磨使用DeepSeek-R1风格训练多模态R1模型,就看到这个工作,本文一起看看,供参考。 先提出问题,仅靠 RL 是否足以激励 MLLM 的推理能力? 结论:不能,因为如果 RL 能有效激励推理能力&#…...
mysql select distinct 和 group by 哪个效率高
在有索引的情况下,SELECT DISTINCT和GROUP BY的效率相同;在没有索引的情况下,SELECT DISTINCT的效率高于GROUP BY。这是因为SELECT DISTINCT和GROUP BY都会进行分组操作,但GROUP BY可能会进行排序,触发filesort&…...
阿里云操作系统控制台评测:国产AI+运维 一站式运维管理平台
阿里云操作系统控制台评测:国产AI运维 一站式运维管理平台 引言 随着云计算技术的飞速发展,企业在云端的运维管理面临更高的要求。阿里云操作系统控制台作为一款集运维管理、智能助手和系统诊断等多功能于一体的工具,正逐步成为企业高效管理…...
Linux基础开发工具—vim
目录 1、vim的概念 2、vim的常见模式 2.1 演示切换vim模式 3、vim命令模式常用操作 3.1 移动光标 3.2 删除文字 3.3 复制 3.4 替换 4、vim底行模式常用命令 4.1 查找字符 5、vim的配置文件 1、vim的概念 Vim全称是Vi IMproved,即说明它是Vi编辑器的增强…...
11 应用层的域名知识点
一、DNS 1、理解 定义:DNS(Domain Name System,域名系统)是互联网的一项核心服务,它将人类可读的域名(也叫网址,如 www.example.com)转换为机器可读的IP地址(如 192.0.…...
5-24 色彩与风格——T2IA自适应
前言: 上一节我们介绍了ControlNet中的inpaint局部重绘 主要介绍ControlNet中的T2IA自适应。 色彩风格的参考和借鉴能力,有点类似于5-17 reference参考图 或者 5-16 画面风格迁移-shuffle洗牌 。当然在硬件的要求,软件的算法实现和使用方式…...
JAVA-Thread类实现多线程
引言: 本章博客涉及进程线程内容,如果不了解的可以看:什么是进程线程-CSDN博客 线程是操作系统的概念,操作系统提供的API供程序员使用操作。但是不同的操作系统(Winodws、Linux、Unix……差别很大),但是做为JAVA程序员就不需要担心…...
顺序表,单链表,双链表,循环链表(01星球)
文章目录 数据结构前导------C语言复习程序为什么要被编译器编译之后才能运行编译器把C语言程序转换成可以执行的机器码的过程做了什么宏定义typedef 关键字全局变量和局部变量常量字符的输入输出运算符冯诺依曼架构存储器容量数据类型指针指针本质为什么需要指针 数组数组指针…...
代码社区开源协议
开源协议是一种法律文件,用于规定开源软件的使用、修改和分发条件。它平衡了开发者和使用者的权益,同时推动开放协作与技术创新。以下是常见的开源协议及其特点和适用场景: 常见开源协议列表及介绍 1. MIT License 特点:非常宽…...
[免费]微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端+Vue管理端)(高级版)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端Vue管理端)(高级版),分享下哈。 项目视频演示 【免费】微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端Vue管理端)(高级版…...
树莓派:更新源
发行版本 Debian 一直维护着至少三个发行版本:“稳定版(stable)”,“测试版(testing)”和“不稳定版(unstable)”。 发行版目录 下一代 Debian 正式发行版的代号为 bullseye — 发布…...
树与二叉树的遍历
我们平时用的树都是二叉树 一、一些基础概念 1. 树就是一种:一对多的数据结构。树离不开递归,因为“树”就是“树”中有“树”。 二叉树就是 :空树 或者 每个结点的子结点个数小于等于2。 满二叉树: 除叶子结点外所有结点的…...
Web基础:HTML快速入门
HTML基础语法 HTML(超文本标记语言) 是用于创建网页内容的 标记语言,通过定义页面的 结构和内容 来告诉浏览器如何呈现网页。 超文本(Hypertext) 是一种通过 链接(Hyperlinks) 将不同文本、图像…...
异常(8)
今天补充一些异常的细节,帮助大家更好的理解异常. 注:关于异常的处理方式 异常的种类有很多,我们要根据不同的业务场景来决定. 对于比较严重的问题(例如和算钱相关的场景),应该让程序直接崩溃,防止造成更严重的结果 对于不太严重的问题(大多数场景),可以记录错误日志,并通过…...