MySQL 内置函数
1. 日期函数
函数名称 | 描述 |
---|---|
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() | 获取当前日期时间 |
获得年月日:日期
mysql> select current_date();
+--------------+
| current_date |
+--------------+
| 2025-08-01 |
+--------------+
获得时分秒:时间
mysql> select current_time();
+--------------+
| current_time |
+--------------+
| 20:15:34 |
+--------------+
获得时间戳:日期+时间
mysql> select current_timestamp();
+---------------------+
| current_timestamp |
+---------------------+
| 2025-08-01 20:15:02 |
+---------------------+mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2025-08-01 20:17:26 |
+---------------------+
截取日期部分:我们需要确保输入的格式是符合要求的:
[年]-[月]-[日]“空格”[时]:[分]:[秒]
mysql> select date('1949-10-01 00:00:00');
+-----------------------------+
| date('1949-10-01 00:00:00') |
+-----------------------------+
| 1949-10-01 |
+-----------------------------+
我们就可以实现函数嵌套的方式来时间日期的截取:
mysql> select date(now());
+-------------+
| date(now()) |
+-------------+
| 2025-08-01 |
+-------------+
在日期的基础上加日期:
mysql> select date_add('2050-01-01', interval 10 day);
+-----------------------------------------+
| date_add('2050-01-01', interval 10 day) |
+-----------------------------------------+
| 2050-01-11 |
+-----------------------------------------+mysql> select date_add(now(), interval 10 minute);
+-------------------------------------+
| date_add(now(), interval 10 minute) |
+-------------------------------------+
| 2025-08-01 20:36:12 |
+-------------------------------------+
在日期的基础上减去时间:
select date_sub('2017-10-1', interval 2 day);
+---------------------------------------+
| date_sub('2017-10-1', interval 2 day) |
+---------------------------------------+
| 2017-09-29 |
+---------------------------------------+
计算两个日期之间相差多少天:前者距离后者多少天了
select datediff('2017-10-10', '2016-9-1');
+------------------------------------+
| datediff('2017-10-10', '2016-9-1') |
+------------------------------------+
| 404 |
+------------------------------------+mysql> select datediff('2005-09-22', '2025-08-01');
+--------------------------------------+
| datediff('2005-09-22', '2025-08-01') |
+--------------------------------------+
| -7253 |
+--------------------------------------+
案例 - 1:
创建一张表,记录生日:
mysql> create table tmp(-> id bigint primary key auto_increment,-> birthday date not null-> );
Query OK, 0 rows affected (0.00 sec)mysql> desc tmp;
+----------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| birthday | date | NO | | NULL | |
+----------+------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
添加当前日期:
mysql> insert into tmp (birthday) values ('2005-02-02');
Query OK, 1 row affected (0.00 sec)mysql> insert into tmp (birthday) values (now());
Query OK, 1 row affected, 1 warning (0.00 sec)mysql> insert into tmp (birthday) values ('1980-01-01');
Query OK, 1 row affected (0.00 sec)mysql> select * from tmp;
+----+------------+
| id | birthday |
+----+------------+
| 1 | 2005-02-02 |
| 2 | 2025-08-01 |
| 3 | 1980-01-01 |
+----+------------+
我们使用now(),这种时间戳类型的,不是纯纯的日期类型的,也是可以插入成功的,我们可以看成是隐式类型转化!
不过我们还是尽量这么写 --- 让别人更加清楚:
mysql> insert into tmp (birthday) values (date(current_timestamp()));
Query OK, 1 row affected (0.00 sec)
案例 - 2:
我们在头条上看到一则新闻,想要发送个评论,一般就会有这几个信息:发送人,发送信息,发送时间,发送地址....这里就有一个重要的概念:发送时间!
创建一个留言表:
mysql> create table msg(-> id bigint primary key auto_increment,-> content varchar(100) not null,-> sendtime datetime-> );
Query OK, 0 rows affected (0.01 sec)
插入数据:
mysql> insert into msg (content, sendtime) values ("我喜欢这个博客/主,快点三连!(❤ ω❤ )", now());
Query OK, 1 row affected (0.00 sec)mysql> ^C
mysql> select * from msg;
+----+---------------------------------------------------------+---------------------+
| id | content | sendtime |
+----+---------------------------------------------------------+---------------------+
| 1 | 我喜欢这个博客/主,快点三连!(❤ ω❤ ) | 2025-08-01 20:56:56 |
+----+---------------------------------------------------------+---------------------+
1 row in set (0.00 sec)mysql> select date(sendtime) from msg;
+----------------+
| date(sendtime) |
+----------------+
| 2025-08-01 |
+----------------+
1 row in set (0.00 sec)
显示所有留言信息,发布日期只显示日期,不用显示时间:
mysql> select content, sendtime from msg;
+---------------------------------------------------------+---------------------+
| content | sendtime |
+---------------------------------------------------------+---------------------+
| 我喜欢这个博客/主,快点三连!(❤ ω❤ ) | 2025-08-01 20:56:56 |
+---------------------------------------------------------+---------------------+
1 row in set (0.00 sec)
请查询在10分钟内发布的帖子:
使用时间运算:
我们使用数学运算就是从发表评论的时间增加规定时间,超过了当前的时间就是在规定时间之内的!反着来,使用date_sub函数也是可以的!
mysql> select * from msg where date_add(sendtime, interval 2 minute) > now();
Empty set (0.01 sec)mysql> select * from msg where date_add(sendtime, interval 10 minute) > now();
+----+---------------------------------------------------------+---------------------+
| id | content | sendtime |
+----+---------------------------------------------------------+---------------------+
| 1 | 我喜欢这个博客/主,快点三连!(❤ ω❤ ) | 2025-08-01 20:56:56 |
+----+---------------------------------------------------------+---------------------+
1 row 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, position [, length]) | 从str 的position 开始,取length 个字符 |
ltrim(string) | 去除前空格或后空格 |
rtrim(string) | 去除前空格或后空格 |
trim(string) | 去除前空格或后空格 |
创建了两个表:dept
和 emp
。dept
表用于存储部门信息,包括部门编号(deptno
)、部门名称(dname
)和地址(loc
)。emp
表用于存储员工信息,包括员工编号(empno
)、姓名(ename
)、岗位(job
)、直接领导编号(mgr
)、雇佣日期(hiredate
)、薪水(sal
)、提成(comm
)和部门编号(deptno
)。emp
表中的 deptno
是一个外键,引用 dept
表的 deptno
字段。在 dept
表中插入了四个部门的数据,在 emp
表中插入了14条员工数据。这些数据包括员工的基本信息和他们在公司中的职位关系。
# 创建表 dept
create table dept(deptno int primary key auto_increment, -- 部门编号dname varchar(14) , -- 部门名字loc varchar(13) -- 地址
) ;
# 给dept中插入四条数据
insert into dept values(10,'财务部','北京');
insert into dept values(20,'研发部','上海');
insert into dept values(30,'销售部','广州');
insert into dept values(40,'行政部','深圳');# 创建表emp
create table emp(empno int primary key auto_increment,-- 员工编号ename varchar(10), -- 员工姓名 -job varchar(9), -- 岗位mgr int, -- 直接领导编号hiredate date, -- 雇佣日期,入职日期sal int, -- 薪水comm int, -- 提成deptno int not null, -- 部门编号foreign key (deptno) references dept(deptno)
);# 给emp表插入14条数据
insert into emp values(7369,'刘一','职员',7902,'1980-12-17',800,null,20);
insert into emp values(7499,'陈二','推销员',7698,'1981-02-20',1600,300,30);
insert into emp values(7521,'张三','推销员',7698,'1981-02-22',1250,500,30);
insert into emp values(7566,'李四','经理',7839,'1981-04-02',2975,null,20);
insert into emp values(7654,'王五','推销员',7698,'1981-09-28',1250,1400,30);
insert into emp values(7698,'赵六','经理',7839,'1981-05-01',2850,null,30);
insert into emp values(7782,'孙七','经理',7839,'1981-06-09',2450,null,10);
insert into emp values(7788,'周八','分析师',7566,'1987-06-13',3000,null,20);
insert into emp values(7839,'吴九','总裁',null,'1981-11-17',5000,null,10);
insert into emp values(7844,'郑十','推销员',7698,'1981-09-08',1500,0,30);
insert into emp values(7876,'郭十一','职员',7788,'1987-06-13',1100,null,20);
insert into emp values(7900,'钱多多','职员',7698,'1981-12-03',950,null,30);
insert into emp values(7902,'大锦鲤','分析师',7566,'1981-12-03',3000,null,20);
insert into emp values(7934,'木有钱','职员',7782,'1983-01-23',1300,null,10);
mysql> select * from emp;
+-------+-----------+-----------+------+------------+------+------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+-------+-----------+-----------+------+------------+------+------+--------+
| 7369 | 刘一 | 职员 | 7902 | 1980-12-17 | 800 | NULL | 20 |
| 7499 | 陈二 | 推销员 | 7698 | 1981-02-20 | 1600 | 300 | 30 |
| 7521 | 张三 | 推销员 | 7698 | 1981-02-22 | 1250 | 500 | 30 |
| 7566 | 李四 | 经理 | 7839 | 1981-04-02 | 2975 | NULL | 20 |
| 7654 | 王五 | 推销员 | 7698 | 1981-09-28 | 1250 | 1400 | 30 |
| 7698 | 赵六 | 经理 | 7839 | 1981-05-01 | 2850 | NULL | 30 |
| 7782 | 孙七 | 经理 | 7839 | 1981-06-09 | 2450 | NULL | 10 |
| 7788 | 周八 | 分析师 | 7566 | 1987-06-13 | 3000 | NULL | 20 |
| 7839 | 吴九 | 总裁 | NULL | 1981-11-17 | 5000 | NULL | 10 |
| 7844 | 郑十 | 推销员 | 7698 | 1981-09-08 | 1500 | 0 | 30 |
| 7876 | 郭十一 | 职员 | 7788 | 1987-06-13 | 1100 | NULL | 20 |
| 7900 | 钱多多 | 职员 | 7698 | 1981-12-03 | 950 | NULL | 30 |
| 7902 | 大锦鲤 | 分析师 | 7566 | 1981-12-03 | 3000 | NULL | 20 |
| 7934 | 木有钱 | 职员 | 7782 | 1983-01-23 | 1300 | NULL | 10 |
+-------+-----------+-----------+------+------------+------+------+--------+
14 rows in set (0.00 sec)
获取emp
表的ename
列的字符集:
mysql> select charset(ename) from emp;
+----------------+
| charset(ename) |
+----------------+
| utf8 |
| utf8 |
| utf8 |
| utf8 |
| utf8 |
| utf8 |
| utf8 |
| utf8 |
| utf8 |
| utf8 |
| utf8 |
| utf8 |
| utf8 |
| utf8 |
+----------------+
14 rows in set (0.00 sec)
根据字符串,得到编码格式!
mysql> select charset('abcd');
+-----------------+
| charset('abcd') |
+-----------------+
| utf8 |
+-----------------+
获取编码格式 --- utf8
要求显示dept表中的信息,显示格式:“XXX的编号是: XXX ,地点是在XXX”:
mysql> select * from dept;
+--------+-----------+--------+
| deptno | dname | loc |
+--------+-----------+--------+
| 10 | 财务部 | 北京 |
| 20 | 研发部 | 上海 |
| 30 | 销售部 | 广州 |
| 40 | 行政部 | 深圳 |
+--------+-----------+--------+
4 rows in set (0.00 sec)mysql> select concat(dname, '的编号是: ', deptno, ' ,地点是在', loc) as '信息' from dept;
+-----------------------------------------------+
| 信息 |
+-----------------------------------------------+
| 财务部的编号是: 10 ,地点是在北京 |
| 研发部的编号是: 20 ,地点是在上海 |
| 销售部的编号是: 30 ,地点是在广州 |
| 行政部的编号是: 40 ,地点是在深圳 |
+-----------------------------------------------+
4 rows in set (0.01 sec)
concat 就是连接字符串!
mysql> select concat('a', 'b', 12, 0.1);
+---------------------------+
| concat('a', 'b', 12, 0.1) |
+---------------------------+
| ab120.1 |
+---------------------------+
1 row in set (0.00 sec)
判断一个substr,是否包含在str中,如果存在,请返回位置,否则返回0!--- 下标从1开始:
mysql> select instr('adafsa1234dsfa', '1234');
+---------------------------------+
| instr('adafsa1234dsfa', '1234') |
+---------------------------------+
| 7 |
+---------------------------------+
1 row in set (0.00 sec)mysql> select instr('adafsa1234dsfa', '12345');
+----------------------------------+
| instr('adafsa1234dsfa', '12345') |
+----------------------------------+
| 0 |
+----------------------------------+
1 row in set (0.00 sec)
将字符串转大/小写:
mysql> select ucase('adsafbhDD1u109mKK');
+----------------------------+
| ucase('adsafbhDD1u109mKK') |
+----------------------------+
| ADSAFBHDD1U109MKK |
+----------------------------+
1 row in set (0.00 sec)mysql> select lcase('ADdabda138y1863AS');
+----------------------------+
| lcase('ADdabda138y1863AS') |
+----------------------------+
| addabda138y1863as |
+----------------------------+
1 row in set (0.00 sec)
从string中,从左取出n个元素:
mysql> select left('123456',0);
+------------------+
| left('123456',0) |
+------------------+
| |
+------------------+
1 row in set (0.00 sec)mysql> select left('123456',3);
+------------------+
| left('123456',3) |
+------------------+
| 123 |
+------------------+
1 row in set (0.00 sec)mysql> select left('123456',11);
+-------------------+
| left('123456',11) |
+-------------------+
| 123456 |
+-------------------+
1 row in set (0.00 sec)
求员工表中员工姓名占用的字节数:length函数返回值的单位是字节!!!中文按照字符编码确定
mysql> SELECT length(ename) AS '长度', ename AS '姓名' FROM emp;
+--------+-----------+
| 长度 | 姓名 |
+--------+-----------+
| 6 | 刘一 |
| 6 | 陈二 |
| 6 | 张三 |
| 6 | 李四 |
| 6 | 王五 |
| 6 | 赵六 |
| 6 | 孙七 |
| 6 | 周八 |
| 6 | 吴九 |
| 6 | 郑十 |
| 9 | 郭十一 |
| 9 | 钱多多 |
| 9 | 大锦鲤 |
| 9 | 木有钱 |
+--------+-----------+
14 rows in set (0.00 sec)
将EMP
表中所有名字中有'一'的替换成'上官':
mysql> select replace(ename, '一', '上官') as '替换后的名字', ename as '名字' from emp;
+--------------------+-----------+
| 替换后的名字 | 名字 |
+--------------------+-----------+
| 刘上官 | 刘一 |
| 陈二 | 陈二 |
| 张三 | 张三 |
| 李四 | 李四 |
| 王五 | 王五 |
| 赵六 | 赵六 |
| 孙七 | 孙七 |
| 周八 | 周八 |
| 吴九 | 吴九 |
| 郑十 | 郑十 |
| 郭十上官 | 郭十一 |
| 钱多多 | 钱多多 |
| 大锦鲤 | 大锦鲤 |
| 木有钱 | 木有钱 |
+--------------------+-----------+
14 rows in set (0.00 sec)
逐字符比较两个字符串的大小:
mysql> select strcmp('abcs', 'abc');
+-----------------------+
| strcmp('abcs', 'abc') |
+-----------------------+
| 1 |
+-----------------------+
1 row in set (0.00 sec)mysql> select strcmp('abcs', 'abcdd');
+-------------------------+
| strcmp('abcs', 'abcdd') |
+-------------------------+
| 1 |
+-------------------------+
1 row in set (0.00 sec)mysql> select strcmp('abcs', 'abcsd');
+-------------------------+
| strcmp('abcs', 'abcsd') |
+-------------------------+
| -1 |
+-------------------------+
1 row in set (0.00 sec)mysql> select strcmp('abcs', 'abcs');
+------------------------+
| strcmp('abcs', 'abcs') |
+------------------------+
| 0 |
+------------------------+
1 row in set (0.00 sec)
截取EMP
表中ename
字段的第二个到第三个字符:
mysql> select substring(ename, 2, 2), ename from emp;
+------------------------+-----------+
| substring(ename, 2, 2) | ename |
+------------------------+-----------+
| 一 | 刘一 |
| 二 | 陈二 |
| 三 | 张三 |
| 四 | 李四 |
| 五 | 王五 |
| 六 | 赵六 |
| 七 | 孙七 |
| 八 | 周八 |
| 九 | 吴九 |
| 十 | 郑十 |
| 十一 | 郭十一 |
| 多多 | 钱多多 |
| 锦鲤 | 大锦鲤 |
| 有钱 | 木有钱 |
| bc | abc刘一 |
| b刘 | ab刘一 |
+------------------------+-----------+
16 rows in set (0.00 sec)
以首字母小写的方式显示所有员工的姓名:
mysql> insert into emp values(8360,'Abc刘一','职员',7902,'1980-12-17',800,null,20);
Query OK, 1 row affected (0.00 sec)mysql> select concat(lcase(substring(ename, 1, 1)),substring(ename,2)) from emp;
+----------------------------------------------------------+
| concat(lcase(substring(ename, 1, 1)),substring(ename,2)) |
+----------------------------------------------------------+
| 刘一 |
| 陈二 |
| 张三 |
| 李四 |
| 王五 |
| 赵六 |
| 孙七 |
| 周八 |
| 吴九 |
| 郑十 |
| 郭十一 |
| 钱多多 |
| 大锦鲤 |
| 木有钱 |
| abc刘一 |
| abc刘一 |
| ab刘一 |
+----------------------------------------------------------+
17 rows in set (0.00 sec)
去除字符串的前后导/前导/后置空格:
mysql> select trim(' inini ');
+---------------------+
| trim(' inini ') |
+---------------------+
| inini |
+---------------------+
1 row in set (0.00 sec)mysql> select length(trim(' inini '));
+-----------------------------+
| length(trim(' inini ')) |
+-----------------------------+
| 5 |
+-----------------------------+
1 row in set (0.00 sec)mysql> select trim(' ini ni ');
+----------------------+
| trim(' ini ni ') |
+----------------------+
| ini ni |
+----------------------+
1 row in set (0.00 sec)mysql> select ltrim(" mm "), length(ltrim(" mm ")) as '长度';
+-----------------+--------+
| ltrim(" mm ") | 长度 |
+-----------------+--------+
| mm | 4 |
+-----------------+--------+
1 row in set (0.00 sec)mysql> select rtrim(" mm "), length(rtrim(" mm ")) as '长度';
+-----------------+--------+
| rtrim(" mm ") | 长度 |
+-----------------+--------+
| mm | 4 |
+-----------------+--------+
1 row in set (0.00 sec)
3. 数学函数
函数名称 | 描述 |
---|---|
abs(number) | 绝对值函数 |
bin(decimal_number) | 十进制转换二进制 |
hex(decimalNumber) | 十进制转换成十六进制 |
conv(number, from_base, to_base) | 进制转换 |
ceiling(number) | 向上去整 |
floor(number) | 向下去整 |
format(number, decimal_places) | 格式化,保留小数位数 |
hex(decimalNumber) | 转换成十六进制 |
rand() | 返回随机浮点数,范围 [0.0, 1.0) |
mod(number, denominator) | 取模,求余 |
绝对值:
mysql> select abs(12);
+---------+
| abs(12) |
+---------+
| 12 |
+---------+
1 row in set (0.00 sec)mysql> select abs(-12.9);
+------------+
| abs(-12.9) |
+------------+
| 12.9 |
+------------+
1 row in set (0.00 sec)
十进制转换二进制:一般传入的浮点数会进行取整后运算,浮点数的机器码表示是比较麻烦的
mysql> select bin(10);
+---------+
| bin(10) |
+---------+
| 1010 |
+---------+
1 row in set (0.00 sec)mysql> select bin(-10);
+------------------------------------------------------------------+
| bin(-10) |
+------------------------------------------------------------------+
| 1111111111111111111111111111111111111111111111111111111111110110 |
+------------------------------------------------------------------+
1 row in set (0.00 sec)mysql> select bin(10.1);
+-----------+
| bin(10.1) |
+-----------+
| 1010 |
+-----------+
1 row in set (0.00 sec)mysql> select conv(10, 10, 2);
+-----------------+
| conv(10, 10, 2) |
+-----------------+
| 1010 |
+-----------------+
1 row in set (0.00 sec)mysql> select conv(-10, 10, 2);
+------------------------------------------------------------------+
| conv(-10, 10, 2) |
+------------------------------------------------------------------+
| 1111111111111111111111111111111111111111111111111111111111110110 |
+------------------------------------------------------------------+
1 row in set (0.00 sec)mysql> select conv(10.8, 10, 2);
+-------------------+
| conv(10.8, 10, 2) |
+-------------------+
| 1010 |
+-------------------+
1 row in set (0.00 sec)
十进制转换成十六进制:hex()浮点数进行四舍五入,使用conv()则是向下取整
mysql> select hex(11);
+---------+
| hex(11) |
+---------+
| B |
+---------+
1 row in set (0.00 sec)mysql> select hex(-11);
+------------------+
| hex(-11) |
+------------------+
| FFFFFFFFFFFFFFF5 |
+------------------+
1 row in set (0.00 sec)mysql> select hex(11.5);
+-----------+
| hex(11.5) |
+-----------+
| C |
+-----------+
1 row in set (0.00 sec)mysql> select hex(11.4);
+-----------+
| hex(11.4) |
+-----------+
| B |
+-----------+
1 row in set (0.00 sec)mysql> select conv(10.8, 10, 16);
+--------------------+
| conv(10.8, 10, 16) |
+--------------------+
| A |
+--------------------+
1 row in set (0.00 sec)mysql> select conv(10.2, 10, 16);
+--------------------+
| conv(10.2, 10, 16) |
+--------------------+
| A |
+--------------------+
1 row in set (0.00 sec)
向上取整:
mysql> select ceiling(23.2);
+---------------+
| ceiling(23.2) |
+---------------+
| 24 |
+---------------+
1 row in set (0.00 sec)mysql> select ceiling(-23.2);
+----------------+
| ceiling(-23.2) |
+----------------+
| -23 |
+----------------+
1 row in set (0.00 sec)
向下取整:
这里补充一下,C语言是进行0向取整的,也就是去掉小数部分!!!
mysql> select floor(23.2);
+-------------+
| floor(23.2) |
+-------------+
| 23 |
+-------------+
1 row in set (0.00 sec)mysql> select floor(-23.2);
+--------------+
| floor(-23.2) |
+--------------+
| -24 |
+--------------+
1 row in set (0.00 sec)
保留2位小数位数(小数四舍五入):进行精度截取
mysql> select format(12.3456, 3);
+--------------------+
| format(12.3456, 3) |
+--------------------+
| 12.346 |
+--------------------+
1 row in set (0.00 sec)
产生随机数: [0.0, 1.0)
mysql> select rand();
+--------------------+
| rand() |
+--------------------+
| 0.7418476955423576 |
+--------------------+
1 row in set (0.00 sec)mysql> select rand();
+---------------------+
| rand() |
+---------------------+
| 0.07517858229128511 |
+---------------------+
1 row in set (0.00 sec)
取模,求余:结果=前%后
mysql> select mod(10, 3);
+------------+
| mod(10, 3) |
+------------+
| 1 |
+------------+
1 row in set (0.00 sec)mysql> select mod(-10, -3);
+--------------+
| mod(-10, -3) |
+--------------+
| -1 |
+--------------+
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位字符串:可用于密码加密,但是这个效果并不是很好
select md5('admin');
+----------------------------------+
| md5('admin') |
+----------------------------------+
| 21232f297a57a5a743894a0e4a801fc3 |
+----------------------------------+
database()
显示当前正在使用的数据库:
select database();
password()
函数,MySQL数据库使用该函数对用户加密:针对密码进行加密 --- 这是比较好的选择!
select password('root');
+-------------------------------------------+
| password('root') |
+-------------------------------------------+
| *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+-------------------------------------------+
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)
5. 实战OJ
-
牛客:查找字符串'10,A,B' 中逗号','出现的次数cnt