数据库中TIMESTAMP , DATE 和 DATETIME

一、TIMESTAMP

显示格式:YYYY-MM-DD HH:MM:SS
时间范围:[ '1970-01-01 00:00:00'到'2037-12-31 23:59:59']

存储空间:4bytes

★列类型 显示格式 

TIMESTAMP(14) YYYYMMDDHHMMSS 
TIMESTAMP(12) YYMMDDHHMMSS 
TIMESTAMP(10) YYMMDDHHMM 
TIMESTAMP(8) YYYYMMDD 
TIMESTAMP(6) YYMMDD 
TIMESTAMP(4) YYMM 
TIMESTAMP(2) YY
所有的TIMESTAMP列都有同样的存储大小,不考虑显示尺寸。最常见的显示尺寸是6、8、12、和14。你可以在表创建时间指定一个任意的显示尺寸,但是值0或比14大被强制到14。在从1~13范围的奇数值尺寸被强制为下一个更大的偶数。

【在创建新记录和修改现有记录的时候都对这个数据列刷新】
TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP  


【在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它】
TIMESTAMP DEFAULT CURRENT_TIMESTAMP  


【在创建新记录的时候把这个字段设置为0,以后修改时刷新它】
TIMESTAMP ON UPDATE CURRENT_TIMESTAMP  


【在创建新记录的时候把这个字段设置为给定值,以后修改时刷新它】
TIMESTAMP DEFAULT ‘yyyy-mm-dd hh:mm:ss’ ON UPDATE CURRENT_TIMESTAMP  


 
1、TIMESTAMP列不为空时,默认值可以为“0000-00-00 00:00:00”,但不能为null。
2、一个表可以存在多个TIMESTAMP列,但一个表只有一个TIMESTAMP类型的字段可以在默认值或者UPDATE部分用CURRENT_TIMESTAMP,即设置为数据更新而改变为数据库系统当前值。
3、TIMESTAMP列的默认值是CURRENT_TIMESTAMP常量值。当纪录数据发生变化的时候,TIMESTAMP列会自动将其值设定为CURRENT_TIMESTAMP。
4、TIMESTAMP列创建后的格式是:
ALTER TABLE `course`
ADD COLUMN `birthday`  timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
 
ALTER TABLE `course`
ADD COLUMN `birthday`  timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP ;
 
ALTER TABLE `course`
ADD COLUMN `birthday`  timestamp NULL AFTER `cname`;
 

二、DATETIME

显示格式:YYYY-MM-DD HH:MM:SS
时间范围:[ '1000-01-01 00:00:00'到'9999-12-31 23:59:59']
存储空间 8bytes

三、DATE

显示格式:YYYY-MM-DD
时间范围:['1000-01-01'到'9999-12-31']
存储空间 3bytes

仅需要日期:DATE

日期和时间:DATETIME,TIMESTAMP


★日期格式转换
1、字符串转日期
select STR_TO_DATE('2013-01-29 13:49:18', '%Y-%m-%d %H:%i:%s')
2、日期转字符串
select DATE_FORMAT('2013-01-29 13:49:18', '%Y-%m-%d %H:%i:%s')
 
★日期的中常用的年月日时分秒星期月份等获取方法
select TIMESTAMP('2013-01-29 13:50:27');
select DATE('2013-01-29 13:50:27');
select YEAR('2013-01-29 13:50:27');
select MONTH(('2013-01-29 13:50:27');
select WEEK('2013-01-29 13:50:27');
select DAY('2013-01-29 13:50:27');
select TIME('2013-01-29 13:50:27');
select CURTIME();
select CURDATE();
select CURRENT_DATE;
select CURRENT_TIME;
select CURRENT_TIMESTAMP;
select NOW()
 
★日期的运算:
SELECT DATE_ADD('2013-01-29 13:50:27', INTERVAL 1 DAY);
                -> '2013-01-30 13:50:27'
SELECT DATE_ADD('2013-01-29 13:50:27', INTERVAL 1 HOUR);
                -> '2013-01-29 14:50:27'
SELECT DATE_ADD('2013-01-29 13:50:27', INTERVAL 1 MONTH);
               -> '2013-02-28 13:50:27'



参考博客:

http://blog.sina.com.cn/s/blog_4c197d420101cmv3.html

http://blog.csdn.net/iijse/article/details/6060335


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TIMESTAMPDATETIME是MySQL用于存储日期和时间的数据类型。它们之间有一些不同点。 首先,它们的存储方式不同。对于TIMESTAMP,它会将客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储,并在查询时再转化为客户端当前时区进行返回。而对于DATETIME,它基本上是原样输入和输出,不做任何改变。[1] 其次,TIMESTAMP有一个特殊的变体,即"TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"。这意味着在创建新记录和修改现有记录时,这个数据列都会被刷新为当前时间。[2] 关于TIMESTAMPDATETIME的一些其他特点包括: - TIMESTAMP列必须有默认值,可以是"0000-00-00 00:00:00",但不能为null。而TIMESTAMP列的值不能被手动设置,只能由数据库自动修改。一个表可以有多个TIMESTAMP列,但只有一个列会根据数据更新而改变为当前时间。因此,在一个表设置多个TIMESTAMP列是没有意义的,实际上一个表通常只需要一个TIMESTAMP列。[3] - TIMESTAMP列的默认值是CURRENT_TIMESTAMP常量值。当记录数据发生变化时,TIMESTAMP列会自动将其值设定为当前时间。[3] - DATETIME列可以设置为多个,默认可以为null,并且可以手动设置其值。DATETIME列不能设定默认值,但可以通过触发器或在插入数据时将其值设置为now()来实现类似的效果。[3] 关于日期格式转换,可以使用DATE_FORMAT函数将日期转换为字符串,也可以使用STR_TO_DATE函数将字符串转换为日期。具体的用法可以参考上述引用[3]的示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值