日期类型

原创 2016年05月31日 21:54:51

Mysql提供数据类型来存储不同种类的日期信息。在这term YYYY,MM,DD,hh,mm,and ss代表年,月,日 ,小时,分钟,和秒。


Type                           storage Required                                                              Range

Date                          3bytes                                                                                  ‘1000-01-01’ to ‘9999-12-31’

Time                           3bytes                                                                                ‘-838:59:59’ to   ‘838:59:59’

DATETIME                 8bytes                                                                                '1000-01-01   00:00:00'  to  '9999-12-31 23:59:59'


TIMESTAMP         4bytes                                                                                     '1970-01-01   00:00:00' to mid-year 2037

YEAR                     1bytes                                                                                      1910 to 2155

这个0值表示一个格式0000-00-00对于DATE和‘00:00:00’对于TIME


日期的展示ISO 8610格式,可以改变显示方式使用DATE_FORMAT()函数


对于日期条目:MYsql 期望接收日期类型以ISO格式,或者至少是和ISO格式相近的,那就是说日期类型必须给year-month-day的顺序,尽管

1.开始的0在月和日值可以不忽略,例如2000-1-1 和2000-01-01都被认为是合法的

2.日期不符需要的不是'-';可以使用其他分隔如‘/';

3.两个数字的日期可以被转化为四个数字的年,你应该能够注意基于如下规则70到99代表1970年到1999,因此00到69代表2000到2069.它是更好的提供四个数字的值来避免转换

如果需要加载不能接受的格式,应该把他们转换为ISO格式。


5.5.1 这DATE,TIME,DATETIME,和YEAR 日期类型

Date数据类型代表日期值在’YYYY-MM-DD‘格式。Year数据类型仅仅代表年的值,你可以声称列为YEAR(4)或者YEAR(2)来获得一个4个数字或两个数字来展示格式。如果你没有指定展示宽度,默认器时4个数字。

5.5.2 这Timestamp数据类型

这timestamp类型存储日期和时间类型。内部存储是UTC,转换为目前时间区域。这TIMESTAMP数据类型可以被初始化或被自动更新到目前的日期和时间当没有明确的指定值。你可以指定任何单独timestamp列在表中应该被初始化用目前的时间当记录被创建使用insert或replace,被更新使用现在的时间当记录被改变使用update。

知道自动初始化和更新的特征是很重要的。

这个特征能够使用timestamp来跟踪记录修改的次数,但是可能是一个问题的源泉没有意思到初始化。

为了控制初始化和更新对于timestamp,你应该增加default current——timestamp和on update——timestamp属性在这timestamp列的定义当创建表和改变表时。这个default_timestamp属性引发被初始化使用被创建的时间。这个on update current_timestamp 属性引发列被更新使用目前时间当它被改变时。

为了兼容就版本的mysql,如果没有指定default和on的属性,mysql自动分配第一个timestamp列两个属性。


mysql> create table ts_test1(
    -> ts1 timestamp,
    -> ts2 timestamp,
    -> data char(30)
    -> );
Query OK, 0 rows affected (0.06 sec)


mysql> describe ts_test1;
+-------+-----------+------+-----+---------------------+-----------------------------+
| Field | Type      | Null | Key | Default             | Extra                       |
+-------+-----------+------+-----+---------------------+-----------------------------+
| ts1   | timestamp | NO   |     | CURRENT_TIMESTAMP   | on update CURRENT_TIMESTAMP |
| ts2   | timestamp | NO   |     | 0000-00-00 00:00:00 |                             |
| data  | char(30)  | YES  |     | NULL                |       


mysql> insert into ts_test1(data) values('original_value');


Query OK, 1 row affected (0.03 sec)


mysql> select* from ts_test1;
+---------------------+---------------------+----------------+
| ts1                 | ts2                 | data           |
+---------------------+---------------------+----------------+
| 2016-05-31 21:32:48 | 0000-00-00 00:00:00 | original_value |
+---------------------+---------------------+----------------+



 update ts_test1 set data='updated_value';
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0


mysql> select* from ts_test1;
+---------------------+---------------------+---------------+
| ts1                 | ts2                 | data          |
+---------------------+---------------------+---------------+
| 2016-05-31 21:33:47 | 0000-00-00 00:00:00 | updated_value |
+---------------------+---------------------+---------------+
1 row in set (0.04 sec)


如果指定:

mysql> create table ts_test2(
    -> created_time timestamp default current_timestamp,
    -> data char(30)
    -> );
Query OK, 0 rows affected (0.04 sec)


mysql> insert into ts_test2(data) values('original_value');
Query OK, 1 row affected (0.03 sec)


mysql> select* from ts_test2;
+---------------------+----------------+
| created_time        | data           |
+---------------------+----------------+
| 2016-05-31 21:36:42 | original_value |
+---------------------+----------------+


mysql> update ts_test2 set data='updated_value';
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0


mysql> select* from ts_test2;
+---------------------+---------------+
| created_time        | data          |
+---------------------+---------------+
| 2016-05-31 21:36:42 | updated_value |
+---------------------+---------------+

更新也不变

mysql> create table ts_test3(
    -> updated_time timestamp on update current_timestamp,
    -> data char(30)
    -> );
Query OK, 0 rows affected (0.06 sec)


mysql> insert into ts_test3(data) values('original_value');
Query OK, 1 row affected (0.03 sec)


mysql> select * from ts_test3;
+---------------------+----------------+
| updated_time        | data           |
+---------------------+----------------+
| 0000-00-00 00:00:00 | original_value |
+---------------------+----------------+
1 row in set (0.03 sec)


mysql> update ts_test3 set data='updated_value';
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0


mysql> select * from ts_test3;
+---------------------+---------------+
| updated_time        | data          |
+---------------------+---------------+
| 2016-05-31 21:42:52 | updated_value |
+---------------------+---------------+


你可以选择使用current_timestamp 不适用或者一个或者两个在一个timestamp列,但是不能使用default current_timestamp 在一列但是使用on update current——timestamp用在另外的一列。

可以使用如下达到目的:

mysql> create table ts_test5(
    -> created timestamp default 0
    -> ,
    -> updated timestamp on update current_timestamp,
    -> data char(30)
    -> );
Query OK, 0 rows affected (0.06 sec)


mysql> insert into ts_test5(created,data)
    -> values(null,'original_value');
Query OK, 1 row affected (0.04 sec)


mysql> slect* from ts_test5;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'slect* from ts_test5' at line 1
mysql> select* from ts_test5;
+---------------------+---------------------+----------------+
| created             | updated             | data           |
+---------------------+---------------------+----------------+
| 2016-05-31 21:53:04 | 0000-00-00 00:00:00 | original_value |
+---------------------+---------------------+----------------+
1 row in set (0.03 sec)


mysql> update ts_test5 set data='updated_value';
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0


mysql> select* from ts_test5;
+---------------------+---------------------+---------------+
| created             | updated             | data          |
+---------------------+---------------------+---------------+
| 2016-05-31 21:53:04 | 2016-05-31 21:53:48 | updated_value |
+---------------------+---------------------+---------------+


MongoDB日期类型

在mongodb中创建日期的时候使用不同的方式创建的日期是不同的。在mongodb中使用Date()创建的日期类型是一个字符串的类型,这个字符串中包含时区等数据 。使用new Date()创建的将会是...
  • lydiacheung
  • lydiacheung
  • 2016年09月22日 08:18
  • 2477

java 中操作日期类型

在JDK 1.1后,java.util.Date 类型的大多数方法已经不推荐使用了。代替它的是Calendar。 而在java.sql.Date 和 java.util.Date之间,有些微妙的关系。...
  • morning2008
  • morning2008
  • 2016年01月10日 13:08
  • 606

Java时间和日期类型的Hibernate映射

在Java中,代表时间和日期的类型包括:java.util.Date和java.util.Calendar。此外在JDBC API中还提供了3个扩展了java.util.Date类的子类:java.s...
  • xiangwanpeng
  • xiangwanpeng
  • 2016年12月04日 15:28
  • 3995

Oracle数据库中关于日期和时间字段类型

与日期有关的有三种类型:date,timestamp与interval。DATE和TIMESTAMP类型存储精度可变的固定日期/时间,二者区别是,后者秒可以精确到小数,另外还可以有时区之分。。INTE...
  • aihongmingqi
  • aihongmingqi
  • 2014年08月29日 09:09
  • 13137

poi解析Excel,格式化日期类型

/** * 解析excel * * @param fileName */ public void parseExcelFile(String fileName) { // St...
  • daxia_DN
  • daxia_DN
  • 2013年10月28日 17:08
  • 1823

SQL Server中的日期时间类型

一. 数据类型 SQL Server008在上一个版本的基础上把日期时间类的数据类型增加到了六个。除了SQL Server2005的datetime和smalltime之外,加了date,d...
  • Yang_Jesus
  • Yang_Jesus
  • 2016年11月21日 21:22
  • 783

java String时间类型转Date时间类型总结

用SimpleDateFormat将不同格式的String类型的时间转Date时,只能转出和原类型格式相同的Date类型数据,自行运行代码一试 public class testwwDate {  /...
  • ww_2016
  • ww_2016
  • 2016年10月21日 11:26
  • 1461

数据库设计中,日期字段的类型应该如何选择?

几乎大多数软件系统都需要依赖于数据库来存储数据,这些数据库大多是支持标准SQL也就是ANSISQL的,我们可以定义各种类型的字段,其中我们常常需要用一个字段来表示日期。但是在不同的数据库我们可以用不同...
  • binbinxyz
  • binbinxyz
  • 2013年01月30日 20:36
  • 10842

jdbc 日期时间相关的类型

http://www.cnblogs.com/xd502djj/archive/2011/02/10/1950817.html jdbc 日期时间相关的类型 1、sql.Date ...
  • baidu_26352053
  • baidu_26352053
  • 2016年07月06日 11:01
  • 334

My97 DatePicker切换日期类型

1、问题背景     日期类型:按日、按月、按年和按时间,切换到不同的类型,日历控件显示不同的日期2、实现源码 my97datepicker切换日期类型 $(d...
  • you23hai45
  • you23hai45
  • 2016年10月19日 16:37
  • 1259
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:日期类型
举报原因:
原因补充:

(最多只允许输入30个字)