Mysql基础教程 mysql进阶

Mysql日期时间类型



日期时间类型


列类型

存储范围

存储需求

TIME

-838:59:59~838:59:59

3

DATE

1000-01-01~9999-12-31 23:59:59

3

DATETIME

1970-01-01 00:00:01~9999-12-31 23:59:59

8

TIMESTAMP

1970-01-01 00:00:01 UTC~2038-01-09 03:14:07

4

YEAR

1901~2155

1


重点的是year类型,开发中常用的是时间戳,用整型来保存时间戳。



测试year


mysql> CREATE TABLE IF NOT EXISTS test9(
    -> birth YEAR
    -> );
Query OK, 0 rows affected (0.28 sec)


开始为1901,并查询


mysql> 
mysql> INSERT test9 VALUES(1901);
Query OK, 1 row affected (0.05 sec)


mysql> SELECT * FROM test9;
+-------+
| birth |
+-------+
| 1901 |
+-------+


最大为2155,并查询


mysql> INSERT test9 VALUES(2155);
Query OK, 1 row affected (0.03 sec)


mysql> SELECT * FROM test9;
+-------+
| birth |
+-------+
|  1901 |
|  2155 |
+-------+
2 rows in set (0.00 sec)


当插入的值大于2155时


mysql> INSERT test9 VALUES(2156);
ERROR 1264 (22003): Out of range value for column 'birth' at row 1


值也可以在字符串


mysql> INSERT test9 VALUES('1988');
Query OK, 1 row affected (0.04 sec)


mysql> SELECT * FROM test9;
+-------+
| birth |
+-------+
| 1901 |
| 2155 |
| 1988 |
+-------+
3 rows in set (0.00 sec)


四位的年份可以,两位的年份也支持,也可以是字符串的形式。


mysql> INSERT test9 VALUES(12);
Query OK, 1 row affected (0.04 sec)


12代表“2012”


mysql> SELECT * FROM test9;
+-------+
| birth |
+-------+
| 1901 |
| 2155 |
| 1988 |
| 2012 |
+-------+
4 rows in set (0.00 sec)


79代表“1979”


mysql> INSERT test9 VALUES('79');
Query OK, 1 row affected (0.03 sec)


mysql> SELECT * FROM test9;
+-------+
| birth |
+-------+
| 1901 |
| 2155 |
| 1988 |
| 2012 |
| 1979 |
+-------+
5 rows in set (0.00 sec)


还有一个特殊的值“0”会显示的值为“0000”


mysql> INSERT test9 VALUES(0);
Query OK, 1 row affected (0.05 sec)


mysql> SELECT * FROM test9;
+-------+
| birth |
+-------+
| 1901 |
| 2155 |
| 1988 |
| 2012 |
| 1979 |
| 0000 |
+-------+
6 rows in set (0.00 sec)


如果写的是字符串的“0”,会显示的值为“2000”


mysql> INSERT test9 VALUES('0');
Query OK, 1 row affected (0.04 sec)


mysql> SELECT * FROM test9;
+-------+
| birth |
+-------+
| 1901 |
| 2155 |
| 1988 |
| 2012 |
| 1979 |
| 0000 |
| 2000 |
+-------+
7 rows in set (0.00 sec)


输入字符串“00”


mysql> INSERT test9 VALUES('00');
Query OK, 1 row affected (0.05 sec)


mysql> SELECT * FROM test9;
+-------+
| birth |
+-------+
| 1901 |
| 2155 |
| 1988 |
| 2012 |
| 1979 |
| 0000 |
| 2000 |
| 2000 |
+-------+
8 rows in set (0.00 sec)



测试time


mysql> CREATE TABLE IF NOT EXISTS test10(
    -> test TIME
    -> );
Query OK, 0 rows affected (0.28 sec)


插入12:12:12


mysql> INSERT test10 VALUES('1 12:12:12');
Query OK, 1 row affected (0.06 sec)


查询时间


mysql> SELECT * FROM test10;
+----------+
| test    |
+----------+
| 36:12:12 |
+----------+
1 row in set (0.00 sec)


插入11:11


mysql> INSERT test10 VALUES('11:11');
Query OK, 1 row affected (0.05 sec)


mysql> SELECT * FROM test10;
+----------+
| test     |
+----------+
| 36:12:12 |
| 11:11:00 |
+----------+
2 rows in set (0.00 sec)


插入1234


mysql> INSERT test10 VALUES('1234');
Query OK, 1 row affected (0.05 sec)


mysql> SELECT * FROM test10;
+----------+
| test     |
+----------+
| 36:12:12 |
| 11:11:00 |
| 00:12:34 |
+----------+
3 rows in set (0.00 sec)


只写12,以为是秒


mysql> INSERT test10 VALUES('12');
Query OK, 1 row affected (0.03 sec)


mysql> SELECT * FROM test10;
+----------+
| test     |
+----------+
| 36:12:12 |
| 11:11:00 |
| 00:12:34 |
| 00:00:12 |
+----------+
4 rows in set (0.00 sec)


如果以字符串“0”,就显示为“00:00:00”


mysql> INSERT test10 VALUES('0');
Query OK, 1 row affected (0.03 sec)


mysql> SELECT * FROM test10;
+----------+
| test     |
+----------+
| 36:12:12 |
| 11:11:00 |
| 00:12:34 |
| 00:00:12 |
| 00:00:00 |
+----------+
5 rows in set (0.00 sec)


以数字0输入,现实的为“00:00:00”


mysql> INSERT test10 VALUES(0);
Query OK, 1 row affected (0.03 sec)


mysql> SELECT * FROM test10;
+----------+
| test     |
+----------+
| 36:12:12 |
| 11:11:00 |
| 00:12:34 |
| 00:00:12 |
| 00:00:00 |
| 00:00:00 |
+----------+
6 rows in set (0.00 sec)


超过时间范围就报错


mysql> INSERT test10 VALUES('66');
ERROR 1292 (22007): Incorrect time value: '66' for column 'test' at row 1



测试date


mysql> ? date
Name: 'DATE'
Description:
DATE


A date. The supported range is '1000-01-01' to '9999-12-31'. MySQL
displays DATE values in 'YYYY-MM-DD' format, but permits assignment of
values to DATE columns using either strings or numbers.


URL: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-type-overview.html
mysql> CREATE TABLE IF NOT EXISTS test11(
    -> test DATE
    -> );
Query OK, 0 rows affected (0.37 sec)


输入“12-6-7”


mysql> INSERT test11 VALUES('12-6-7');
Query OK, 1 row affected (0.07 sec)


查询text11


mysql> SELECT * FROM test11;
+------------+
| test       |
+------------+
| 2012-06-07 |
+------------+
1 row in set (0.00 sec)


可以自己制定分隔符


mysql> INSERT test11 VALUES('1267');
ERROR 1292 (22007): Incorrect date value: '1267' for column 'test' at row 1
mysql> INSERT test11 VALUES('12 6 7');
ERROR 1292 (22007): Incorrect date value: '12 6 7' for column 'test' at row 1
mysql> INSERT test11 VALUES('12/6/7');
Query OK, 1 row affected (0.07 sec)


mysql> SELECT * FROM test11;
+------------+
| test       |
+------------+
| 2012-06-07 |
| 2012-06-07 |
+------------+
2 rows in set (0.00 sec)


也可以写成“120607”


mysql> INSERT test11 VALUES('120607');
Query OK, 1 row affected (0.04 sec)


mysql> SELECT * FROM test11;
+------------+
| test       |
+------------+
| 2012-06-07 |
| 2012-06-07 |
| 2012-06-07 |
+------------+
3 rows in set (0.00 sec)


任意指定分隔符


mysql> INSERT test11 VALUES('12@6/7');
Query OK, 1 row affected (0.03 sec)


mysql> SELECT * FROM test11;
+------------+
| test       |
+------------+
| 2012-06-07 |
| 2012-06-07 |
| 2012-06-07 |
| 2012-06-07 |
+------------+
4 rows in set (0.00 sec)


Date只有3字节,如何来选择字段类型,按照你的具体需求具体分析就可以了。



【本文由麦子学院独家原创,转载请注明出处并保留原文链接】

logo
© 2012-2016 www.maiziedu.com
蜀ICP备13014270号-4 Version 5.0.0 release20160127

麦子大聚惠,豪华礼包你领了吗?

客服热线 400-862-8862

回到顶部