文本

LENGTH()/LEN():返回字符串长度
LOWER():将字符串转换为小写
LEFT():返回左的边字符串
RIGHT():返回右边的字符串
LTRIM():去掉字符串左边的空格
RTRIM():去掉字符串右边的空格

数值

ABS():绝对值
EXP():指数值
COS():余弦
SIN():正弦
TAN():正切
PI():圆周率
SQRT():平方根
():

日期

NOW():当前时间
YEAR():年
MONETH():月
MONTHNAME():月份的单词
DAYOFMONTH():日
TIMESTAMPDIFF():时间差
DATE_SUB()

位运算

很多时候利用位运算的特性可以存储更多的数据,节省磁盘空间;而 MySQL 提供了一系列函数方便我们做进制转换。

函数 说明
BIN(num) 返回十进制 num 的二进制表示
OCT(num) 返回十进制 num 的八进制表示
HEX(num) 返回十进制 num 的十六进制表示
CONV(num,X,Y) 返回 X 进制 num 的 Y 进制表示,X 和 Y 的范围是 2-36
BIT_COUNT(num) 返回十进制 num 在二进制情况下包含几个 1

BIN

返回十进制 num 的二进制表示

1
select bin(3);

OCT

返回十进制 num 的八进制表示

1
select oct(10);

HEX

返回十进制 num 的十六进制表示

1
select hex(20),hex(11);

CONV

返回 X 进制 num 的 Y 进制表示,X 和 Y 的范围是 2-36

1
select conv(5,10,2),conv(101,2,10),conv(10,10,8);

BIT_COUNT

返回十进制 num 在二进制情况下包含几个 1

1
select bit_count(2),bin(2);

窗口函数

开窗函数、分析函数,类似于分组聚合,结合 COUNT、SUM、MIN、MAX、AVG 等聚合函数使用

1
函数 OVER ( PARTITION BYORDER BYASC)

网站点击的 PV、UV;银行账号交易流水

边界

ROWS BETWEEN
PRECEDING:往前
FOLLOWING:往后
CURRENT ROW:当前行
UNBOUNDED:无边界
UNBOUNDED PRECEDING:从起的起点
UNBOUNDED FOLLOWING:从后的重点

排名函数

ROW_NUMBER():按照顺序生成分组内记录的序列
RANK():按照顺序生成分组内记录的排名,排名相对会在名次中留下空位
DENSE_RANK():按照顺序生成分组内记录的排名,排名相对不会在名次中留下空位
NTILE():将分组数据按照顺序分片

1
2
#根据 RptDate 排序,给 AcctCode 分组并添加序列
ROW_NUMBER() OVER ( PARTITION BY AcctCode ORDER BY RptDate ASC)