mysql 计算某个时间,多少天后,多少个月后时间戳

idstart_timeperiod_ytpeperiod_value
11461427200day3
21461427200month2

如上表,
start_time 表示开始时间,
period_ytpe 表示期限类型,
period_value表示期限值,

第一第记录表是 3天,第二条表示2个月

如果查询出,从start_time开始,期限在今天之前的记录

比如:
第一条,start_time开始, 三天后的时间戳,如果是在今天(2016-06-04)之前,则是满足条件!
第二条,start_time开始, 两个月后的时间戳,如果是在今天(2016-06-04)之前,则是满足条件!

在不改数据库的情况下(数据表已经被很多地方引用,且不是我设计),我自己写了一条SQL,做了几步转换,感觉性能不会好,但好像可以用了,还好这个表数据量不大,每天最多新增一条新记录。

把开始start_time转为date,再DATE_ADD加上 日或者月,得到时间再转为 unix_time
用今天凌晨 UNIX_TIMESTAMP(CURDATE())减去 上面得到的时候,如果结果大于 0,那就是想要的结果

SELECT `id`,`name`,
CASE `period_type` 
    WHEN 'day' 
        THEN UNIX_TIMESTAMP(CURDATE())-UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(`start_time`),INTERVAL period_value day))
    WHEN 'month' 
        THEN UNIX_TIMESTAMP(CURDATE())-UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(`start_time`),INTERVAL period_value month))
    ELSE '' 
END AS 'time_interval'
FROM `table`
WHERE `xxxxxxx'
HAVING time_interval>0
ORDER BY time_interval desc

用最笨的办法~~
先用你的语言获取到今天的时间戳。例如1465056000

SELECT * FROM `table` WHERE `period_ytpe` = 'day' AND `start_time` + 86400*`period_value` < 1465056000
UNION
SELECT * FROM `table` WHERE `period_ytpe` = 'month' AND `start_time` + 86400*30*`period_value` < 1465056000

当然缺陷就是,一个月默认当他30天了。
如果你是要用mysql去计算。。那把start_time存成时间类型吧。。然后用date_add去计算

AND话外题。。为啥设计表的时候不直接算好end_time呢?非要筛选的时候去用,计算类的会导致索引失效,很不好。各种扫表

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值