MySQL知识(六)——时间日期函数、系统信息函数
2016-02-20 13:34
666 查看
3 时间和日期函数
3.1 获取当前日期和获取当前时间
(1)CURDATE()和CURRENT_DATE(),将当前日期按照‘YYYY-MM-DD’或YYYYMMDD格式的值返回,具体格式根据函数用在字符串或是数字语境中而定。mysql> select curdate(),current_date(),curdate()+0; +------------+----------------+-------------+ | curdate() | current_date() | curdate()+0 | +------------+----------------+-------------+ | 2016-02-20 | 2016-02-20 | 20160220 | +------------+----------------+-------------+ 1 row in set
(2)CURTIME()和CURRENT_TIME(),将当前时间以‘HH:MM:SS’或HHMMSS的格式返回。
mysql> select curtime(),current_time(),curtime()+0; +-----------+----------------+-------------+ | curtime() | current_time() | curtime()+0 | +-----------+----------------+-------------+ | 11:25:56 | 11:25:56 | 112556 | +-----------+----------------+-------------+ 1 row in set
3.2 同时获取当前日期时间
NOW()、CURRENT_TIMESTAMP()、LOCALTIME()、SYSDATE(),均返回当前日期和时间值,格式为‘YYYY-MM-DD HH:MM:SS’或YYYYMMDDHHMMSS。mysql> select current_timestamp(),localtime(),now(),sysdate(); +---------------------+---------------------+---------------------+---------------------+ | current_timestamp() | localtime() | now() | sysdate() | +---------------------+---------------------+---------------------+---------------------+ | 2016-02-20 11:28:41 | 2016-02-20 11:28:41 | 2016-02-20 11:28:41 | 2016-02-20 11:28:41 | +---------------------+---------------------+---------------------+---------------------+ 1 row in set
3.3 计算日期和时间函数
(1)DATE_ADD(date,INTERVAL expr type)或者ADDDATE(date,INTERVAL expr type),执行日期的运算(2)DATE_SUB(date,INTERVAL expr type)或者SUBDATE(date,INTERVAL expr type),执行日期的运算
(3)ADDTIME(date,expr):将expr值添加到date;SUBTIME(date,expr):date减去expr值。
(4)DATEDIFF(date1,date2):返回起始时间date1和结束时间date2之间的天数。
3.4 将日期和时间格式化的函数
DATE_FORMAT(date,format):根据format指定的格式显示date值。主要的format格式如下表:格式 | 描述 | 格式 | 描述 |
---|---|---|---|
%a | 缩写星期名 | %p | AM 或 PM |
%b | 缩写月名 | %r | 时间,12-小时(hh:mm:ss AM 或 PM) |
%c | 月,数值 | %S,%s | 秒(00-59) |
%D | 带有英文前缀的月中的天 | %T | 时间, 24-小时 (hh:mm:ss) |
%d | 月的天,数值(00-31) | %U | 周 (00-53) 星期日是一周的第一天 |
%e | 月的天,数值(0-31) | %u | 周 (00-53) 星期一是一周的第一天 |
%f | 微秒 | %V | 周 (01-53) 星期日是一周的第一天,与 %X 使用 |
%H | 小时 (00-23) | %v | 周 (01-53) 星期一是一周的第一天,与%x使用 |
%h,%I | 小时 (01-12) | %W | 星期名 |
%i | 分钟,数值(00-59) | %w | 周的天 (0=星期日, 6=星期六) |
%j | 年的天 (001-366) | %X | 年,其中的星期日是周的第一天,4 位,与 %V 使用 |
%k | 小时 (0-23) | %x | 年,其中的星期一是周的第一天,4 位,与 %v 使用 |
%l | 小时 (1-12) | %Y | 年,4 位 |
%M | 月名 | %y | 年,2 位 |
%m | 月,数值(00-12) | %% | ‘%’文字字符 |
mysql> select date_format(now(),'%W %M %Y') as col1, -> date_format(now(),'%D %y %a %d %m %b %j') as col2, -> date_format(now(),'%H:%i:%s') as col3, -> date_format('2016-02-20','%X %V')as col4; +------------------------+---------------------------+----------+---------+ | col1 | col2 | col3 | col4 | +------------------------+---------------------------+----------+---------+ | Saturday February 2016 | 20th 16 Sat 20 02 Feb 051 | 13:10:39 | 2016 07 | +------------------------+---------------------------+----------+---------+ 1 row in set
3.5 其他日期时间函数
(1)获取月份的函数MONTH(date)和MONTHNAME(date)(2)获取星期的函数DAYNAME(d)、DAYOFWEEK(d)和WEEKDAY(d)
(3)获取星期数的函数WEEK(d)和WEEKOFYEAR(d)
(4)获取天数的函数DAYOFYEAR(d)和DAYOFMONTH(d)
(5)获取年份YEAR(date)、季度QUARTER(date)、分钟MINUTE(time)和秒钟SECOND(time)
(6)时间和秒钟转换:TIME_TO_SEC(time)和SEC_TO_TIME(seconds)
4 系统信息函数
4.1 获取版本号、连接数、数据库名
(1)VERSION(),返回指示MySQL服务器版本的字符串,这个字符串使用utf8字符集。mysql> SELECT VERSION(); +-----------+ | VERSION() | +-----------+ | 5.6.24 | +-----------+ 1 row in set
(2)DATABASE()和SCHEMA(),返回使用utf8字符集的默认(当前)数据库名。
mysql> SELECT DATABASE(),SCHEMA(); +------------+----------+ | DATABASE() | SCHEMA() | +------------+----------+ | test | test | +------------+----------+ 1 row in set
(3)CONNECTION_ID(),返回MySQL服务器当前连接的次数,每个连接都有各自唯一的ID。
mysql> SELECT CONNECTION_ID(); +-----------------+ | CONNECTION_ID() | +-----------------+ | 11 | +-----------------+ 1 row in set
(4)SHOW PROCESSLIST; SHOW FULL PROCESSLIST;
processlist命令的输出结果显示了有哪些线程在运行,不仅可以查看当前所有的连接数,还可以查看当前的连接状态,帮助识别出有问题的查询语句等。
如果是root账号,能看到所有用户的当前连接。如果是普通用户,则只能看到自己占用的连接。show processlist;只列出前100条,如果想全部列出可使用show full processlist命令。
mysql> SHOW PROCESSLIST; +----+------+-----------------+------+---------+-------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+-----------------+------+---------+-------+-------+------------------+ | 9 | root | localhost:14493 | NULL | Sleep | 11492 | | NULL | | 10 | root | localhost:14494 | test | Sleep | 11491 | | NULL | | 11 | root | localhost:14495 | test | Query | 0 | init | SHOW PROCESSLIST | +----+------+-----------------+------+---------+-------+-------+------------------+ 3 rows in set
各个列的含义和用途:
(1)Id列:用户登录MySQL时,系统分配的“connection id”;
(2)User列:显示当前用户,如果不是root,这个命令就只显示用户权限范围内的sql语句。
(3)Host列:显示这个语句是从哪个ip的哪个端口上发出的,可以用来追踪出现问题语句的用户。
(4)db列:显示这个进程目前连接的是哪个数据库。
(5)Command列:显示当前连接的执行的命令,一般取值为休眠(Sleep),查询(Query),连接(Connect)。
(6)Time列:显示这个状态持续的时间,单位是秒。
(7)State列:显示使用当前连接的sql语句的状态,很重要的列,后续会有所有状态的描述,State只是语句执行中的某一个状态。一个sql语句,以查询为例,可能需要经过Copying to tmp table,Sorting result,Sending data等状态才可以完成。
(8)Info列:显示这个sql语句,是判断问题语句的一个重要依据。
4.2 获取用户名函数
USER()、CURRENT_USER()、CURRENT_USER、SYSTEM_USER()、SESSION_USER()这个几个函数返回当前被MySQL服务器验证的用户名和主机名组合。一般情况下,这几个函数的返回值是相同的。mysql> SELECT USER(),CURRENT_USER(),CURRENT_USER,SYSTEM_USER(); +----------------+----------------+----------------+----------------+ | USER() | CURRENT_USER() | CURRENT_USER | SYSTEM_USER() | +----------------+----------------+----------------+----------------+ | root@localhost | root@localhost | root@localhost | root@localhost | +----------------+----------------+----------------+----------------+ 1 row in set
4.3 获取最后一个自动生成的ID值的函数
LAST_INSERT_ID()自动返回最后一个INSERT或UPDATE为AUTO_INCREMENT列设置的第一个发生的值。(1)一次插入一条记录
mysql> create table stu(id int auto_increment primary key,name varchar(20)); Query OK, 0 rows affected mysql> insert into stu(name) values('jtzen9'); Query OK, 1 row affected mysql> insert into stu(name) values('heiheihei'); Query OK, 1 row affected mysql> select * from stu; +----+-----------+ | id | name | +----+-----------+ | 1 | jtzen9 | | 2 | heiheihei | +----+-----------+ 2 rows in set mysql> SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 2 | +------------------+ 1 row in set
(2)一次插入多条记录
mysql> insert into stu(name) values('John'),('Nick'),('Mike'); Query OK, 3 rows affected Records: 3 Duplicates: 0 Warnings: 0 mysql> select * from stu; +----+-----------+ | id | name | +----+-----------+ | 1 | jtzen9 | | 2 | heiheihei | | 3 | John | | 4 | Nick | | 5 | Mike | +----+-----------+ 5 rows in set mysql> SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 3 | +------------------+ 1 row in set
LAST_INSERT_ID()只返回插入的第一行数据时产生的值,在这里为第3条记录,因为这使依靠其他服务器复制同样的INSERT语句变得简单。
LAST_INSERT_ID是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID返回表b中的Id值。
相关文章推荐
- mysql忘记root密码如何修改
- 数据库_1: MySQL:基础
- mysql修改表、字段、库的字符集
- FAQ系列 | MySQL DBA修炼秘籍
- mysql设计的注意地方
- MySQL具体解释(19)----------海量数据分页查询优化
- MySql_安装及简单命令
- MySQL字符集乱码总结
- MySQL 数据库常用命令小结
- Navicat for mysql 快捷键整理
- MySQL存储引擎--MyISAM与InnoDB区别
- MySQL树形遍历
- MySql数据库 连接错误之1130
- mysql开启远程访问
- MySql的DQL语句,查询
- 绿色mysql启动脚本
- mysql 日期操作
- MySQL,DML语句CUD的操作
- DDL语句操作表
- MySql数据库的简介