时间类型(单位:字节):
DATETIME 8
是占用空间最多的一种类型(年月日时分秒)
1000-01-0100:00:00”到“9999-12-31 23:59:59”
DATE 3
可显示的日期范围为“1000-01-01”到“9999-12-31”
TIMESTAMP 4
显示的范围为“1970-01-0100:00:00”UTC到“2038-01-19 03:14:07”UTC。其实际存储的内容为“1970-01-0100:00:00”到当前时间的毫秒数。
(年月日时分秒)
总结:datetime 和 timestamp 都表示年月日时分秒。datetime 日期范围 与date相同
附:timestamp 可以在创建与更新的时候设置初始值
CREATE TABLE `news` (
`counts` int(255) DEFAULT NULL,
`dates` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE t1(
flag INT, b TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
UPDATE t1 SET flag = 2
YEAR类型占用1字节,并且在定义时可以指定显示的宽度为YEAR(4)或YEAR(2)
对于YEAR(4),其显示年份的范围为1901~2155;对于YEAR(2),其显示年份的范围为1970~2070。在YEAR(2)的设置下,00~69代表2000~2069年。
TIME类型占用3字节,显示的范围为“-838:59:59”~“838:59:59”。有人会奇怪为什么TIME类型的时间可以大于23。因为TIME类型不仅可以用来保存一天中的时间,也可以用来保存时间间隔,同时这也解释了为什么TIME类型也可以存在负值。和DATETIME类型一样,TIME类型同样可以显示微秒时间,但是在插入时,数据库同样会进行截断操作。
时间操作函数:
1)当前时间:
CURRENT_TIMESTAMP是NOW的同义词
SYSDATE函数返回的是执行到当前函数时的时间
2)时间加减:
SELECT NOW() as now,
DATE_ADD(NOW(),INTERVAL 1 DAY) AS tomorrow,
DATE_SUB(NOW(),INTERVAL 1 DAY) AS yesterday;
附:INTERVAL x YEAR 支持对闰月的操作,在上面的例子中使用了DAY和YEAR数据类型,其实也可以使用MICROSECOND、SECOND、MINUTE、HOUR、WEEK、MONTH等类型。
3)dateformat 函数
SELECT DATE_FORMAT(NOW(),'%y-%m--%d') as datetime
附:一般来说表中都会有一个对日期类型的索引,如果使用上述的语句,优化器绝对不会使用索引,也不可能通过索引来查询数据,因此上述查询的执行效率可能非常低。