id | start_time | period_ytpe | period_value |
---|---|---|---|
1 | 1461427200 | day | 3 |
2 | 1461427200 | month | 2 |
如上表,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
当然缺陷就是,一个月默认当他30天了。
如果你是要用mysql去计算。。那把start_time存成时间类型吧。。然后用date_add去计算
AND话外题。。为啥设计表的时候不直接算好end_time呢?非要筛选的时候去用,计算类的会导致索引失效,很不好。各种扫表