# 内置函数
内置函数一般都是在 select 子句中使用,而不能在 where 等子句中使用。
不同的 DBMS 内置的函数略有不同,下面的函数都适用于 MySQL,但并不一定适用于其他 DBMS(如 SQL Server、Oracle、PostgreSQL 等)。
# 数学函数
函数 | 说明 |
---|---|
abs(列名) | 求绝对值 |
mod(被除数, 除数) | 求余 |
round(列名, n) | 四舍五入 |
truncate(列名, n) | 截取小数 |
sign(列名) | 获取符号 |
pi() | 获取圆周率 |
rand() | 获取随机数(0~1) |
ceil(列名) | 向上取整 |
floor(列名) | 向下取整 |
**示例:**返回每个产品的名称和四舍五入到两位小数的价格。
SELECT name, ROUND(price) AS rounded_price
FROM fruit;
2
# 字符串函数
函数 | 说明 |
---|---|
length(列名) | 求字符串长度 |
trim(列名) | 同时去除开头和结尾的空格 |
reverse(列名) | 反转字符串 |
repeat(列名, n) | 将一个字符串重复多次 |
replace(列名, A, B) | 将字符串的一部分替换成另一个字符串 |
substring(列名, start, length) | 截取字符串的一部分 |
left(列名, n) | 截取开头的n个字符 |
right(列名, n) | 截取结尾的n个字符 |
concat(列1, 列2, …, 列n) | 连接两个或多个列 |
lower(列名) | 将字符串的大写字母转换为小写字母 |
upper(列名) | 将字符串的小写字母转换为大写字母 |
lpad(列名, length, str) | 在头部补全字符串长度 |
rpad(列名, length, str) | 在尾部补全字符串长度 |
**示例:**返回每个产品的名称和名称的长度。
中文算作两个长度
SELECT name, length(name) AS name_length
FROM fruit;
2
# 时间函数
函数 | 说明 |
---|---|
curdate() | 获取当前的“日期” |
curtime() | 获取当前的“时间” |
now() | 获取系统当前的日期和时间 |
year(列名) | 获取指定日期的年份是什么 |
month(列名) | 获取指定日期的月份 |
monthname(列名) | 获取指定日期的月份名称 |
dayofweek(列名) | 获取指定日期对应是星期几(数字) |
dayname(列名) | 获取指定日期对应是星期几 |
dayofmonth(列名) | 获取指定日期是一个月中的第几天 |
dayofyear(列名) | 指定日期是一年中的第几天 |
quarter(date) | 获取指定日期对应是一年中的第几季 |
# 排名函数
排名和排序是非常类似的,不过它们之间也是有一定区别:排名会新增一个列,用于表示名次情况。
# rank()
给某一列的排序结果添加名次。不过rank()函数是跳跃性的排名,比如有4名学生,有2个并列第1名,那么名次就是:1、1、3、4。
rank() over(
partition by 列名
order by 列名 asc或desc
)
2
3
4
partition by
(可选):用于将结果集分成多个分区,并在每个分区内独立应用排名。order by
:用于指定排序的依据,决定排名的顺序。
**示例:**将数据按照类型分类然后按照价格排序
SELECT *, RANK() OVER(PARTITION BY type ORDER BY price DESC) AS rank_price
FROM fruit;
2
# row_number()
row_number()函数是用来给某一列的排序结果添加行号。比如有4名学生,有2个并列第1名,那么行号也只有一种情况:1、2、3、4。
row_number() over(
partition by 列名
order by 列名 asc或desc
)
2
3
4
# dense_rank()
dense_rank()结合了rank()和row_number()的特点,它的排序数字是连续不间断的。比如有4名学生,有2个并列第1名,那么它的结果是:1、2、2、3。
dense_rank() over(
partition by 列名
order by 列名 asc或desc
)
2
3
4
# 加密函数
在实际开发中,有些数据是非常重要的(比如用户的密码),我们不能“明文”存到数据库里面,而是先对其加密然后再进行保存。
下面是两个常用的加密方式:
# md5()
MySQL中,md5()函数表示使用md5算法来对字符串进行加密。md5()函数是使用非常广泛的一种算法,并且加密是不可逆的。
# sha1()
sha1()函数表示使用sha-1技术来对字符串进行加密。sha1()比md5()更加安全,并且加密是不可逆的。
# 系统函数
在MySQL中,系统函数主要是用于获取当前数据库的信息。常用的系统函数有4个,如下表所示。
函数 | 说明 |
---|---|
database() | 获取数据库的名字 |
version() | 获取当前数据库的版本号 |
user() | 获取当前用户名 |
connection_id() | 获取当前连接id |
# 其他函数
除了之前介绍的函数之外,MySQL还有一些比较常用的函数,如下表所示。
函数 | 说明 |
---|---|
cast(列名 as type) | 类型转换(将一种数据类型转换为另一种数据类型) |
if(条件, 值1, 值2) | 某一列的值进行条件判断 |
ifnull(列名, 新值) | 条件判断,判断某一列的值是否为NULL |
示例:
SELECT name,
price,
IF(price > 20, 'High', 'Low') AS price_level
FROM fruit;
2
3
4