在date中添加日期/时间,interval后的数值单位可以是:year minute second day
date_sub(date,interval d_value_type)
在date中减去日期/时间,interval后的数值单位可以是:year minute second day
datediff(date1,date2)
两个日期的差,单位是天
now()
当前日期时间
样例
//获取当前的年月日
mysql> select current_date();+----------------+|current_date()|+----------------+|2025-06-24|+----------------+1 row in set(0.00 sec)//获取当前的时分秒
mysql> select current_time();+----------------+|current_time()|+----------------+|14:50:45|+----------------+1 row in set(0.00 sec)//获取当前的时间戳
mysql> select current_timestamp();+---------------------+|current_timestamp()|+---------------------+|2025-06-2414:51:15|+---------------------+1 row in set(0.00 sec)//返回获取时间戳的日期部分
mysql> select date(current_timestamp());+---------------------------+|date(current_timestamp())|+---------------------------+|2025-06-24|+---------------------------+1 row in set(0.00 sec)//当前日期+5天
mysql> select date_add('2004-02-20',interval 5 day);+---------------------------------------+|date_add('2004-02-20',interval 5 day)|+---------------------------------------+|2004-02-25|+---------------------------------------+1 row in set(0.00 sec)//当前日期减去10天
mysql> select date_sub('2025=06-24',interval 10 day);+----------------------------------------+|date_sub('2025=06-24',interval 10 day)|+----------------------------------------+|2025-06-14|+----------------------------------------+1 row in set,1warning(0.00 sec)//计算两个日期直接相差的天数
mysql> select datediff(current_date(),'2004-02-20');+---------------------------------------+|datediff(current_date(),'2004-02-20')|+---------------------------------------+|7795|+---------------------------------------+1 row in set(0.00 sec)//获取当前日期和时间
mysql> select now();+---------------------+|now()|+---------------------+|2025-06-2414:55:32|+---------------------+1 row in set(0.00 sec)//创建一张留言表
mysql> create table msg(-> id int primary key auto_increment,-> content varchar(30)not null,-> sendtime datetime
->);
Query OK,0 rows affected(0.03 sec)
mysql> desc msg;+----------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+----------------+| id |int| NO | PRI |NULL| auto_increment || content |varchar(30)| NO ||NULL||| sendtime | datetime | YES ||NULL||+----------+-------------+------+-----+---------+----------------+3 rows in set(0.00 sec)//向表中插入数据
mysql> insert into msg(content,sendtime)values('人生自古谁无死',now());
Query OK,1 row affected(0.00 sec)
mysql> insert into msg(content,sendtime)values('留取丹心照汗青',now());
Query OK,1 row affected(0.00 sec)//查表
mysql> select *from msg;+----+-----------------------+---------------------+| id | content | sendtime |+----+-----------------------+---------------------+|1| 人生自古谁无死 |2025-06-2414:58:31||2| 留取丹心照汗青 |2025-06-2414:58:46|+----+-----------------------+---------------------+2 rows in set(0.00 sec)//显示所有留言的信息,只要日期,不要时间
mysql> select content,date(sendtime) from msg;+-----------------------+----------------+| content |date(sendtime)|+-----------------------+----------------+| 人生自古谁无死 |2025-06-24|| 留取丹心照汗青 |2025-06-24|+-----------------------+----------------+2 rows in set(0.00 sec)//查询在5分钟之内的留言信息
mysql> select * from msg where date_add(sendtime,interval 5 minute)>now();+----+-----------------------+---------------------+| id | content | sendtime |+----+-----------------------+---------------------+|1| 人生自古谁无死 |2025-06-2414:58:31||2| 留取丹心照汗青 |2025-06-2414:58:46|+----+-----------------------+---------------------+2 rows in set(0.00 sec)
2.字符串函数
函数名称
描述
charset(str)
返回字符串字符集
concat(string2 [,…])
连接字符串
instr(string,substring)
返回substring在string中出现的位置,没有返回0
ucase(string2)
转换成大写
lcase(string2)
转换成小写
left(string2,length)
从string2中的左边起取length个字符
length(string)
string的长度
replace(str,search_str,replace_str)
在str中用replace_str替换search_str
strcmp(string1,string2)
逐字符比较两字符串大小
substring(str,postion [,length])
从str的postion位置开始,取length个字符
ltrim(string) rtrim(string) trim(string)
去除前空格/后空格
样例
//获取emp表ename列的字符集
mysql> select charset(ename) from emp;+----------------+|charset(ename)|+----------------+| utf8mb3 || utf8mb3 || utf8mb3 || utf8mb3 |+----------------+14 rows in set(0.00 sec)
mysql> select *from exam_result;+----+-----------+---------+------+---------+| id | name | chinese | math | english |+----+-----------+---------+------+---------+|1| 唐三藏 |134|98|56||3| 猪悟能 |176|98|90||4| 曹孟德 |140|90|67||5| 刘玄德 |110|115|45||6| 孙权 |140|73|78||7| 宋公明 |150|95|30|+----+-----------+---------+------+---------+6 rows in set(0.00 sec)//要求显示exam_result表中的信息,显示格式:姓名:XXX,总分:XXX,语文:XXXX,数学:XXX,英语:XXX
mysql> select concat('姓名:',name,',总分:',english+math+chinese ,',.语文:',chinese,,.数学:',math,,.英语:',eglish) as mag from exam_result;+-------------------------------------------------------------------------+| mag |+-------------------------------------------------------------------------+| 姓名:唐三藏,总分:288,语文:134,数学:98,英语:56|| 姓名:猪悟能,总分:364,语文:176,数学:98,英语:90|| 姓名:曹孟德,总分:297,语文:140,数学:90,英语:67|| 姓名:刘玄德,总分:270,语文:110,数学:115,英语:45|| 姓名:孙权,总分:291,语文:140,数学:73,英语:78|| 姓名:宋公明,总分:275,语文:150,数学:95,英语:30|+-------------------------------------------------------------------------+6 rows in set(0.00 sec)//找后一个字符串在前一个字符串的什么位置
mysql> select instr('abcd1234ABCD','1234');+------------------------------+|instr('abcd1234ABCD','1234')|+------------------------------+|5|+------------------------------+1 row in set(0.00 sec)//转换成大写
mysql> select ucase('abcd1234ABCD');+-----------------------+|ucase('abcd1234ABCD')|+-----------------------+| ABCD1234ABCD |+-----------------------+1 row in set(0.00 sec)//转换成小写
mysql> select lcase('abcd1234ABCD');+-----------------------+|lcase('abcd1234ABCD')|+-----------------------+| abcd1234abcd |+-----------------------+1 row in set(0.00 sec)//从字符串左边开始取length个字符
mysql> select left('abcdefghi',4);+---------------------+|left('abcdefghi',4)|+---------------------+| abcd |+---------------------+1 row in set(0.00 sec)//从字符串右边开始取length个字符
mysql> select right('abcdefghi',4);+----------------------+|right('abcdefghi',4)|+----------------------+| fghi |+----------------------+1 row in set(0.00 sec)//求字符串的长度
mysql> select length('abcdef');+------------------+|length('abcdef')|+------------------+|6|+------------------+1 row in set(0.01 sec)
mysql> select * from emp;+--------+--------+-----------+------+---------------------+---------+---------+--------+| empno | ename | job | mgr | hiredate | sal | comm | deptno |+--------+--------+-----------+------+---------------------+---------+---------+--------+|007369| SMITH | CLERK |7902|1980-12-1700:00:00|800.00|NULL|20||007499| ALLEN | SALESMAN |7698|1981-02-2000:00:00|1600.00|300.00|30||007521| WARD | SALESMAN |7698|1981-02-2200:00:00|1250.00|500.00|30||007566| JONES | MANAGER |7839|1981-04-0200:00:00|2975.00|NULL|20||007654| MARTIN | SALESMAN |7698|1981-09-2800:00:00|1250.00|1400.00|30||007698| BLAKE | MANAGER |7839|1981-05-0100:00:00|2850.00|NULL|30||007782| CLARK | MANAGER |7839|1981-06-0900:00:00|2450.00|NULL|10||007788| SCOTT | ANALYST |7566|1987-04-1900:00:00|3000.00|NULL|20||007839| KING | PRESIDENT |NULL|1981-11-1700:00:00|5000.00|NULL|10||007844| TURNER | SALESMAN |7698|1981-09-0800:00:00|1500.00|0.00|30||007876| ADAMS | CLERK |7788|1987-05-2300:00:00|1100.00|NULL|20||007900| JAMES | CLERK |7698|1981-12-0300:00:00|950.00|NULL|30||007902| FORD | ANALYST |7566|1981-12-0300:00:00|3000.00|NULL|20||007934| MILLER | CLERK |7782|1982-01-2300:00:00|1300.00|NULL|10|+--------+--------+-----------+------+---------------------+---------+---------+--------+14 rows in set(0.00 sec)//将ename列字符串中存在的'S'改成'上海'
mysql> select replace(ename,'S','上海'),ename from emp;+-----------------------------+--------+|replace(ename,'S','上海')| ename |+-----------------------------+--------+| 上海MITH | SMITH || ALLEN | ALLEN || WARD | WARD || JONE上海 | JONES || MARTIN | MARTIN || BLAKE | BLAKE || CLARK | CLARK || 上海COTT | SCOTT || KING | KING || TURNER | TURNER || ADAM上海 | ADAMS || JAME上海 | JAMES || FORD | FORD || MILLER | MILLER |+-----------------------------+--------+14 rows in set(0.00 sec)//比较两个字符串的大小
mysql> select strcmp('abd','abc');+---------------------+|strcmp('abd','abc')|+---------------------+|1|+---------------------+1 row in set(0.00 sec)//截取EMP表中ename字段的第二个到第三个字符
mysql> select substring(ename,2,2),ename from emp;+----------------------+--------+|substring(ename,2,2)| ename |+----------------------+--------+| MI | SMITH || LL | ALLEN || AR | WARD || ON | JONES || AR | MARTIN || LA | BLAKE || LA | CLARK || CO | SCOTT || IN | KING || UR | TURNER || DA | ADAMS || AM | JAMES || OR | FORD || IL | MILLER |+----------------------+--------+14 rows in set(0.00 sec)//去除空格
mysql> select trim(' 你好 ') as msg;+--------+| msg |+--------+| 你好 |+--------+1 row in set(0.00 sec)
mysql> select ltrim(' 你好 ') as msg;+-------------------+| msg |+-------------------+| 你好 |+-------------------+1 row in set(0.00 sec)
mysql> select rtrim(' 你好 ') as msg;+--------------+| msg |+--------------+| 你好 |+--------------+1 row in set(0.00 sec)//以首字母小写的方式显示所有员工的姓名
mysql> select ename,concat(lcase(substring(ename,1,1)),substring(ename,2)) as ename from emp;+--------+--------+| ename | ename |+--------+--------+| SMITH | sMITH || ALLEN | aLLEN || WARD | wARD || JONES | jONES || MARTIN | mARTIN || BLAKE | bLAKE || CLARK | cLARK || SCOTT | sCOTT || KING | kING || TURNER | tURNER || ADAMS | aDAMS || JAMES | jAMES || FORD | fORD || MILLER | mILLER |+--------+--------+14 rows in set(0.00 sec)
3.数学函数
函数名称
描述
abs(number)
绝对值函数
bin(number)
十进制转二进制
hex(number)
转换成十六进制
conv(number,from_base,to_base)
进制转换
ceiling(number)
向上取整
floor(number)
向下取整
format(number,decimal_places)
格式化,保留小数位数
rand()
生成随机数
mod(number,denominator)
取模,求余
样例
//求绝对值
mysql> select abs(12);+---------+|abs(12)|+---------+|12|+---------+1 row in set(0.00 sec)
mysql> select abs(-12);+----------+|abs(-12)|+----------+|12|+----------+1 row in set(0.00 sec)//转换成二进制
mysql> select bin(10);+---------+|bin(10)|+---------+|1010|+---------+1 row in set(0.00 sec)//转换成十六进制
mysql> select hex(10);+---------+|hex(10)|+---------+| A |+---------+1 row in set(0.00 sec)//将10从十进制转换成十六进制
mysql> select conv(10,10,16);+----------------+|conv(10,10,16)|+----------------+| A |+----------------+1 row in set(0.00 sec)//向上取整
mysql> select ceiling(4.1);+--------------+|ceiling(4.1)|+--------------+|5|+--------------+1 row in set(0.00 sec)
mysql> select ceiling(-4.3);+---------------+|ceiling(-4.3)|+---------------+|-4|+---------------+1 row in set(0.00 sec)//向下取整
mysql> select floor(4.1);+------------+|floor(4.1)|+------------+|4|+------------+1 row in set(0.00 sec)
mysql> select floor(-4.3);+-------------+|floor(-4.3)|+-------------+|-5|+-------------+1 row in set(0.00 sec)//格式化,保留2位小数
mysql> select format(3.1415926,2);+---------------------+|format(3.1415926,2)|+---------------------+|3.14|+---------------------+1 row in set(0.00 sec)//生成随机数 范围[0.0,1.0)
mysql> select rand();+------------------+|rand()|+------------------+|0.74572997237158|+------------------+1 row in set(0.00 sec)//取模
mysql> select mod(10,3);+-----------+|mod(10,3)|+-----------+|1|+-----------+1 row in set(0.00 sec)
4.其他函数
//user() 查询当前用户
mysql> select user();+----------------+|user()|+----------------+| root@localhost |+----------------+1 row in set(0.00 sec)//md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串
mysql> select md5('123456');+----------------------------------+|md5('123456')|+----------------------------------+| e10adc3949ba59abbe56e057f20f883e |+----------------------------------+1 row in set(0.00 sec)//ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值
select ifnull('abc','123');+----------------------+|ifnull('abc','123')|+----------------------+| abc |+----------------------+1 row in set(0.01 sec)
select ifnull(null,'123');+---------------------+|ifnull(null,'123')|+---------------------+|123|+---------------------+1 row in set(0.00 sec)