mysql timestamp分区,MySQL使用UNIX_TIMESTAMP时间戳分区的方法

MySQL分区有很多种,这里我只讨论按时间——按天分区!

在操作之前,你仍然有必要执行如下命令,查看你的MySQL版本是否支持partition功能:

show variables like '%partition%'

如果系统输出如下结果,那么恭喜你,MySQL支持分区!

CREATE TABLE quarterly_report_status (

report_id INT NOT NULL,

report_status VARCHAR(20) NOT NULL,

report_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

)

PARTITION BY RANGE ( UNIX_TIMESTAMP(report_updated) ) (

PARTITION p0 VALUES LESS THAN ( UNIX_TIMESTAMP('2011-01-01 00:00:00') ),

PARTITION p1 VALUES LESS THAN ( UNIX_TIMESTAMP('2011-02-01 00:00:00') ),

PARTITION p2 VALUES LESS THAN ( UNIX_TIMESTAMP('2011-03-01 00:00:00') ),

PARTITION p3 VALUES LESS THAN ( UNIX_TIMESTAMP('2011-04-01 00:00:00') ),

PARTITION p4 VALUES LESS THAN ( UNIX_TIMESTAMP('2011-05-01 00:00:00') ),

PARTITION p5 VALUES LESS THAN ( UNIX_TIMESTAMP('2011-06-01 00:00:00') ),

PARTITION p6 VALUES LESS THAN ( UNIX_TIMESTAMP('2011-07-01 00:00:00') ),

PARTITION p7 VALUES LESS THAN ( UNIX_TIMESTAMP('2011-08-01 00:00:00') ),

PARTITION p8 VALUES LESS THAN ( UNIX_TIMESTAMP('2011-09-01 00:00:00') ),

PARTITION p9 VALUES LESS THAN (MAXVALUE)

);

官方文档说从MySQL 5.1.43开始,除了TIMESTAMP 外,其他日期类型都不接受!

偶虽然没有尝试,至于你信不信,反正我是信了!

Explain Partitions SQL测试,看看是否有效:

explain partitions select * FROM quarterly_report_status q where q.report_updated

输出:

| id | select_type | table | partitions | type | possible_keys | key  | key_len| ref     | rows | Extra       |

|  1 | SIMPLE        | q       | p0,p1       | ALL  | NULL              | NULL | NULL    | NULL |    2    | Using where |

1 row in set (0.00 sec)

相关函数:from_unixtime(date)

date为需要处理的参数(该参数是Unix 时间戳),可以是字段名,也可以直接是Unix 时间戳字符串

后面的 '%Y%m%d' 主要是将返回值格式化(可有可无)

例如:教学网 eduyo.com

mysql>SELECT FROM_UNIXTIME( 1249488000, '%Y%m%d' )

->20071120

mysql>SELECT FROM_UNIXTIME( 1249488000, '%Y年%m月%d' )

->2007年11月20

UNIX_TIMESTAMP() 是与之相对正好相反的时间函数

UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)

若无参数调用,则返回一个 Unix timestamp ('1970-01-01 00:00:00' GMT 之后的秒数) 作为无符号整数。若用date 来调用 UNIX_TIMESTAMP(),它会将参数值以'1970-01-01 00:00:00' GMT后的秒数的形式返回。date 可以是一个 DATE 字符串、一个 DATETIME字符串、一个 TIMESTAMP或一个当地时间的YYMMDD 或YYYMMDD格式的数字。

例如:

mysql> SELECT UNIX_TIMESTAMP() ; (执行使得时间:2009-08-06 10:10:40)

->1249524739

mysql> SELECT UNIX_TIMESTAMP('2009-08-06') ;

->1249488000

SELECT * FROM `student` WHERE regTime > UNIX_TIMESTAMP( curdate( ) )

(责任编辑:ken)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值