跳到主要内容
版本:6.6.0

TiDB函数

概述

TiDB 中函数和操作符使用方法与 MySQL 基本一致,详情参见: Functions and Operators

在 SQL 语句中,表达式可用于诸如 SELECT 语句的 ORDER BY 或 HAVING 子句,SELECT/DELETE/UPDATE 语句的 WHERE子句,或 SET 语句之类的地方。

表达式求值的类型转换

TiDB 中表达式求值的类型转换与 MySQL 基本一致,详情参见 MySQL 表达式求值的类型转换

操作符

操作符功能描述
AND, &&逻辑与
=赋值 (可用于 SET 语句中, 或用于 UPDATE 语句的 SET 中 )
:=赋值
BETWEEN … AND …判断值满足范围
BINARY将一个字符串转换为一个二进制字符串
&位与
~位非
\|位或
^按位异或
CASEcase 操作符
DIV整数除
/除法
=相等比较
<=>空值安全型相等比较
>大于
>=大于或等于
IS判断一个值是否等于一个布尔值
IS NOT判断一个值是否不等于一个布尔值
IS NOT NULL非空判断
IS NULL空值判断
<<左移
<小于
<=小于或等于
LIKE简单模式匹配
-
%, MOD求余
NOT, !取反
NOT BETWEEN … AND …判断值是否不在范围内
!=, <>不等于
NOT LIKE不符合简单模式匹配
NOT REGEXP不符合正则表达式模式匹配
||, OR逻辑或
+
REGEXP使用正则表达式进行模式匹配
>>右移
RLIKE REGEXP同义词
*
-取反符号
XOR逻辑亦或

操作符优先级

操作符优先级显示在以下列表中,从最高优先级到最低优先级。同一行显示的操作符具有相同的优先级。

image.png

控制流程函数

TiDB 支持使用 MySQL 5.7 中提供的所有控制流程函数。

函数名功能描述
CASECase操作符
IF()构建if/else
IFNULL()构建NUll if/else
NULLIF()如果expr1 = expr2,返回NULL

字符串函数

TiDB 支持使用 MySQL 5.7 中提供的大部分字符串函数

支持的函数

函数名功能描述
ASCII()返回最左字符的数值
BIN()返回一个数的二进制值的字符串表示
BIT_LENGTH()返回字符串的位长度
CHAR()返回由整数的代码值所给出的字符组成的字符串
CHAR_LENGTH()返回字符串的字符长度
CHARACTER_LENGTH()与 CHAR_LENGTH() 功能相同
CONCAT()返回连接的字符串
CONCAT_WS()返回由分隔符连接的字符串
ELT()返回指定位置的字符串
EXPORT_SET()返回一个字符串,其中值位中设置的每个位,可以得到一个 on 字符串,而每个未设置的位,可以得到一个 off 字符串
FIELD()返回参数在后续参数中出现的第一个位置
FIND_IN_SET()返回第一个参数在第二个参数中出现的位置
FORMAT()返回指定小数位数格式的数字
FROM_BASE64()解码 base-64 表示的字符串,并返回结果
HEX()返回一个十进制数或字符串值的 16 进制表示
INSERT()在指定位置插入一个子字符串,最多不超过指定字符数
INSTR()返回第一次出现的子字符串的索引
LCASE()与 LOWER() 功能相同
LEFT()返回最左侧指定长度的字符
LENGTH()返回字符串长度,单位为字节
LIKE进行简单模式匹配
LOCATE()返回第一次出现的子字符串的位置
LOWER()返回全小写的参数
LPAD()返回字符串参数,左侧添加指定字符串
LTRIM()去掉前缀空格
MAKE_SET()返回一组用逗号分隔的字符串,这些字符串的位数与给定的 bits 参数对应
MID()返回一个以指定位置开始的子字符串
NOT LIKE否定简单模式匹配
NOT REGEXPREGEXP 的否定形式
OCT()返回一个数值的八进制表示,形式为字符串
OCTET_LENGTH()与 LENGTH() 功能相同
ORD()返回该参数最左侧字符的字符编码
POSITION()与 LOCATE() 功能相同
QUOTE()使参数逃逸,为了在 SQL 语句中使用
REGEXP使用正则表达式匹配模式
REPEAT()以指定次数重复一个字符串
REPLACE()替换所有出现的指定字符串
REVERSE()反转字符串里的所有字符
RIGHT()返回指定数量的最右侧的字符
RLIKE与 REGEXP 功能相同
RPAD()以指定次数添加字符串
RTRIM()去掉后缀空格
SPACE()返回指定数量的空格,形式为字符串
STRCMP()比较两个字符串
SUBSTR()返回指定的子字符串
SUBSTRING()返回指定的子字符串
SUBSTRING_INDEX()从一个字符串中返回指定出现次数的定界符之前的子字符串
TO_BASE64()返回转化为 base-64 表示的字符串参数
TRIM()去掉前缀和后缀空格
UCASE()与 UPPER() 功能相同
UNHEX()返回一个数的十六进制表示,形式为字符串
UPPER()参数转换为大写形式

不支持的函数

  • LOAD_FILE()

  • MATCH

  • SOUNDEX()

  • SOUNDS LIKE

  • WEIGHT_STRING()

数值函数与操作符

TiDB 支持使用 MySQL 5.7 中提供的所有数值函数与操作符

算术操作符

操作符名功能描述
+加号
-减号
*乘号
/除号
DIV整数除法
%, MOD模运算,取余
-更改参数符号

数学函数

函数名功能描述
POW()返回参数的指定乘方的结果值
POWER()返回参数的指定乘方的结果值
EXP()返回 e(自然对数的底)的指定乘方后的值
SQRT()返回非负数的二次方根
LN()返回参数的自然对数
LOG()返回第一个参数的自然对数
LOG2()返回参数以 2 为底的对数
LOG10()返回参数以 10 为底的对数
PI()返回 pi 的值
TAN()返回参数的正切值
COT()返回参数的余切值
SIN()返回参数的正弦值
COS()返回参数的余弦值
ATAN()返回参数的反正切值
ATAN2(), ATAN()返回两个参数的反正切值
ASIN()返回参数的反正弦值
ACOS()返回参数的反余弦值
RADIANS()返回由度转化为弧度的参数
DEGREES()返回由弧度转化为度的参数
MOD()返回余数
ABS()返回参数的绝对值
CEIL()返回不小于参数的最小整数值
CEILING()返回不小于参数的最小整数值
FLOOR()返回不大于参数的最大整数值
ROUND()返回参数最近似的整数或指定小数位数的数值
RAND()返回一个随机浮点值
SIGN()返回参数的符号
CONV()不同数基间转换数字,返回数字的字符串表示
TRUNCATE()返回被舍位至指定小数位数的数字
CRC32()计算循环冗余码校验值并返回一个 32 位无符号值

日期和时间函数

函数名功能描述
ADDDATE()将时间间隔添加到日期上
ADDTIME()时间数值相加
CONVERT_TZ()转换时区
CURDATE()返回当前日期
CURRENT_DATE(), CURRENT_DATE与 CURDATE() 同义
CURRENT_TIME(), CURRENT_TIME与 CURTIME() 同义
CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP与 NOW() 同义
CURTIME()返回当前时间
DATE()从日期或日期/时间表达式中提取日期部分
DATE_ADD()将时间间隔添加到日期上
DATE_FORMAT()返回满足指定格式的日期/时间
DATE_SUB()从日期减去指定的时间间隔
DATEDIFF()返回两个日期间隔的天数
DAY()与 DAYOFMONTH() 同义
DAYNAME()返回星期名称
DAYOFMONTH()返回参数对应的天数部分(1-31)
DAYOFWEEK()返回参数对应的星期下标
DAYOFYEAR()返回参数代表一年的哪一天 (1-366)
EXTRACT()提取日期/时间中的单独部分
FROM_DAYS()将天数转化为日期
FROM_UNIXTIME()将 Unix 时间戳格式化为日期
GET_FORMAT()返回满足日期格式的字符串
HOUR()提取日期/时间表达式中的小时部分
LAST_DAY返回参数中月份的最后一天
LOCALTIME(), LOCALTIME与 NOW() 同义
LOCALTIMESTAMP, LOCALTIMESTAMP()与 NOW() 同义
MAKEDATE()根据给定的年份和一年中的天数生成一个日期
MAKETIME()根据给定的时、分、秒生成一个时间
MICROSECOND()返回参数的微秒部分
MINUTE()返回参数的分钟部分
MONTH()返回参数的月份部分
MONTHNAME()返回参数的月份名称
NOW()返回当前日期和时间
PERIOD_ADD()在年-月表达式上添加一段时间(数个月)
PERIOD_DIFF()返回间隔的月数
QUARTER()返回参数对应的季度(1-4)
SEC_TO_TIME()将秒数转化为 ‘HH:MM:SS’ 的格式
SECOND()返回秒数(0-59)
STR_TO_DATE()将字符串转化为日期
SUBDATE()当传入三个参数时作为 DATE_SUB() 的同义
SUBTIME()从一个时间中减去一段时间
SYSDATE()返回该方法执行时的时间
TIME()返回参数的时间表达式部分
TIME_FORMAT()格式化时间
TIME_TO_SEC()返回参数对应的秒数
TIMEDIFF()返回时间间隔
TIMESTAMP()传入一个参数时候,该方法返回日期或日期/时间表达式, 传入两个参数时候, 返回参数的和
TIMESTAMPADD()在日期/时间表达式上增加一段时间间隔
TIMESTAMPDIFF()从日期/时间表达式中减去一段时间间隔
TO_DAYS()将参数转化对应的天数(从第 0 年开始)
TO_SECONDS()将日期或日期/时间参数转化为秒数(从第 0 年开始)
UNIX_TIMESTAMP()返回一个 Unix 时间戳
UTC_DATE()返回当前的 UTC 日期
UTC_TIME()返回当前的 UTC 时间
UTC_TIMESTAMP()返回当前的 UTC 日期和时间
WEEK()返回参数所在的一年中的星期数
WEEKDAY()返回星期下标
WEEKOFYEAR()返回参数在日历中对应的一年中的星期数
YEAR()返回参数对应的年数
YEARWEEK()返回年数和星期数

GROUP BY 聚合函数

TiDB 支持的 MySQL GROUP BY 聚合函数如下所示:

函数名功能描述
COUNT()返回检索到的行的数目
COUNT(DISTINCT)返回不同值的数目
SUM()返回和
AVG()返回平均值
MAX()返回最大值
MIN()返回最小值
GROUP_CONCAT()返回连接的字符串

注意:

  • 除非另有说明,否则聚合函数默认忽略 NULL 值。

  • 如果在不包含 GROUP BY 子句的语句中使用聚合函数,则相当于对所有行进行分组。

GROUP BY 修饰符

TiDB 目前不支持 GROUP BY 修饰符,例如 WITH ROLLUP。

窗口函数

TiDB 中窗口函数的使用方法与 MySQL 8.0 基本一致,详情可参见MySQL 窗口函数
TiDB 支持的窗口函数如下所示:

函数名功能描述
CUME_DIST()返回一组值中的累积分布
DENSE_RANK()返回分区中当前行的排名,并且排名是连续的
FIRST_VALUE()当前窗口中第一行的表达式值
LAG()分区中当前行前面第 N 行的表达式值
LAST_VALUE()当前窗口中最后一行的表达式值
LEAD()分区中当前行后面第 N 行的表达式值
NTH_VALUE()当前窗口中第 N 行的表达式值
NTILE()将分区划分为 N 桶,为分区中的每一行分配桶号
PERCENT_RANK()返回分区中小于当前行的百分比
RANK()返回分区中当前行的排名,排名可能不连续
ROW_NUMBER()返回分区中当前行的编号

其他函数

TiDB 支持使用 MySQL 5.7 中提供的大部分其他函数