MySQL知识(六)——时间日期函数、系统信息函数

来源:互联网 发布:f2移动数据不能上网 编辑:程序博客网 时间:2024/06/06 16:38

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 affectedmysql> insert into stu(name) values('jtzen9');Query OK, 1 row affectedmysql> insert into stu(name) values('heiheihei');Query OK, 1 row affectedmysql> select * from stu;+----+-----------+| id | name      |+----+-----------+|  1 | jtzen9    ||  2 | heiheihei |+----+-----------+2 rows in setmysql> 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 affectedRecords: 3  Duplicates: 0  Warnings: 0mysql> select * from stu;+----+-----------+| id | name      |+----+-----------+|  1 | jtzen9    ||  2 | heiheihei ||  3 | John      ||  4 | Nick      ||  5 | Mike      |+----+-----------+5 rows in setmysql> 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值。

1 0
原创粉丝点击