MySQL内置函数(8)
文章目录
- 前言
- 一、日期函数
- 二、字符串函数
- 三、数学函数
- 四、其它函数
- 总结
前言
其实在之前的几篇中我们也用到了内置函数,现在我们再来系统学习一下它!
一、日期函数
函数名称 | 描述 |
---|---|
current_date() | 获取当前日期 |
current_time() | 获取当前时间 |
current_timestamp() | 获取当前时间戳 |
date(datetime) | 返回 datetime 参数的日期部分 |
date_add(date, interval d_value_type) | 在 date 中添加日期或时间,interval 后的数值单位可以是 year、minute、second、day |
date_sub(date, interval d_value_type) | 在 date 中减去日期或时间,interval 后的数值单位可以是 year、minute、second、day |
datediff(date1, date2) | 计算两个日期之间的差值,单位是天 |
now() | 获取当前日期时间 |
- 获取当前日期
SELECT current_date();
- 获取当前时间
SELECT current_time();
- 获取当前时间戳
SELECT current_timestamp();
- 获取当前日期时间
SELECT now();
- 截断当前时间,只获得日期部分
SELECT date(now());
- 在日期的基础上加日期
SELECT date_add(now(), interval 10 year);
- 在日期的基础上减去时间
SELECT date_sub(now(), interval 10 minute);
- 计算两个日期之间相差多少天
SELECT datediff(now(), '1949-10-01');
学了以上函数总得来个实际案例来试验一下
创建一张记录生日的表
CREATE TABLE tmp(id INT PRIMARY KEY AUTO_INCREMENT,birthday DATE NOT NULL
);
虽然 current_time() 这里显示的是时分秒,实际上插入的时候也能插入,所有的时间在获取的时候都是 年-月-日,时:分:秒,只不过显示时是不一样的。
创建一个留言表
CREATE TABLE msg( id INT PRIMARY KEY AUTO_INCREMENT,content VARCHAR(100) NOT NULL,sendtime DATETIME
);
显示所有留言信息,发布日期只显示日期
SELECT content, date(sendtime) FROM msg;
然后我们查看2分钟内发的贴子
SELECT * FROM msg WHERE date_add(sendtime, interval 2 minute) > now();
二、字符串函数
函数名称 | 描述 |
---|---|
charset(str) | 返回字符串字符集(编码集) |
concat(string [,…]) | 连接字符串 |
instr(string, substring) | 返回子字符串在字符串中的位置,无则返回0(mysql 起始从 1 开始 |
ucase(string) | 转换成大写 |
lcase(string) | 转换成小写 |
left(string, length) | 从字符串左边起取 length 个字符 |
right(string, length) | 从字符串右边起取 length 个字符 |
length(string) | 字符串长度 |
replace(str, search_str, replace_str) | 在字符串中用 replace_str 替换 search_str |
strcmp(string1, string2) | 逐字符比较两个字符串大小 |
substring(str, position [,length]) | 从字符串的 position 开始,取 length 个字符 |
ltrim(string), rtrim(string), trim(string) | 去除前后空格 |
- 获取 emp 表的 ename 列的字符集
SELECT charset(ename) FROM emp;
- 连接字符串
SELECT concat(name, '的语文是', chinese, '分,', '数学', math, '分,', '英语', english, '分') FROM exam_result;
- 求学生表中学生姓名占用的字节数
select length(name) from exam_result;
以前说过 mysql 的字符真的就是一个字符,utf8中一个汉字占3个字节。
length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数;如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数(与字符集编码有关)
- 截取 emp 表中 ename 字段的第二个到第三个字符
SELECT ename, substring(ename, 2, 2) FROM emp;
- 以首字母小写的方式显示所有员工的姓名
SELECT ename, concat(lcase(substring(ename, 1, 1)), substring(ename, 2)) FROM emp;
substring(ename, 1, 1) 从第一个开始,截一个字符
三、数学函数
函数名称 | 描述 |
---|---|
abs(number) | 绝对值函数 |
bin(decimal_number) | 十进制转二进制 |
hex(decimalNumber) | 转换成十六进制 |
conv(number, from_base, to_base) | 进制转换 |
ceiling(number) | 向上去整(数据变大 |
floor(number) | 向下去整 |
format(number, decimal_places) | 格式化,保留小数位数 |
rand() | 返回随机浮点数,范围 [0.0, 1.0) |
mod(number, denominator) | 取模,求余 |
- ceiling(number) 向上去整
- floor(number) 向下去整
一般我进行取整的时候是进行 四舍五入 取整,但是除了 四舍五入 还有其他的取整方式。我们把丢弃小数部分的取整方式称为向0取整,以前我们在 C 学的 9 / 2 = 4 就是向0取整,还有向大的方向取的向上取整、向小的方向取的向下取整
四、其它函数
查询当前用户
SELECT user();
显示当前正在使用的数据库
SELECT database();
一个字符串进行md5摘要,摘要后得到一个32位字符串
select md5(string);
如果 val1 为null,返回 val2 ,否则返回 val1 的值
IFNULL(val1, val2) -- 如果 `val1` 为 `NULL`,返回 `val2`,否则返回 `val1` 的值
总结
以上函数提供了丰富的操作能力,使得在处理数据时更加灵活和方便,因此我们需要好好掌握!!!