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

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呢?非要筛选的时候去用,计算类的会导致索引失效,很不好。各种扫表

時間存儲建議將字段設置為 timestamp 或者 datetime 類型, 而不是數值類型的時間戳.

首先數值類型的時間戳不便於 SQL 中查詢, 另代碼中也需要進行轉換

在數值類型 SQL 中相關函數也無法使用, 需要先對數值類型時間戳轉換城 timestamp 或者 datetime 類型在計算

如果是 timestamp 或者是 datetime 可以使用 date_add 函數增加或者減少時間達到時間的要求

http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-add

例如

select date_add(start_time, interval 1 day) from t

給 start_time 增加一天

明确问题,你应该是要求start_time在某天或者某月之后的时间戳。

思路:用当前时间转换成date格式,将date加上你要获取的某天或某月的数值,然后将结果转成时间戳

date_add(date,interval n exp)

其中date为date时间格式,如果是时间戳需要转换,exp可以为

SECOND 秒 SECONDS MINUTE 分钟 MINUTES HOUR 时间 HOURS DAY 天 DAYS MONTH 月 MONTHS

YEAR 年 YEARS MINUTE_SECOND 分钟和秒 “MINUTES:SECONDS” HOUR_MINUTE 小时和分钟 “HOURS:MINUTES”

DAY_HOUR 天和小时 “DAYS HOURS” YEAR_MONTH 年和月 “YEARS-MONTHS”

HOUR_SECOND 小时, 分钟, “HOURS:MINUTES:SECONDS” DAY_MINUTE 天, 小时, 分钟 “DAYS HOURS:MINUTES” DAY_SECOND 天, 小时, 分钟, 秒 “DAYS HOURS:MINUTES:SECONDS”

1.从start_time开始3天后的时间戳:

MYSQL代码如下

select UNIX_TIMESTAMP(date_add(FROM_UNIXTIME(start_time), interval 3 day)) from t

3代表你要加的天数,将T换成你的数据库的任意表执行即可

2.从start_time开始N月后的时间戳:

select UNIX_TIMESTAMP(date_add(FROM_UNIXTIME(start_time), interval 3 MONTH)) from t

此函数数MYSQL的,其他数据库也有相应的函数,但是没有测过。

试着写了一下,失败了。

期望的SQL:

SELECT * FROM table

WHERE start_time < UNIX_TIMESTAMP(DATE_SUB(CURRENT_DATE, INTERVAL `period_value` `period_type`));

结果以上SQL语法有误,

较为接近的SQL:

SELECT * FROM table

WHERE start_time < UNIX_TIMESTAMP(DATE_SUB(CURRENT_DATE, INTERVAL `period_value` DAY));

但这就用不上

period_type

字段了。

其实正如@lyt8384 所说,在SQL语句里运用不适当的运算会让索引失效的,查询效率也会相应下降。

如果有权限改变表结构的话,可以新增一个

end_time

字段,

end_time(单位:s)=start_time + period_type * period_value

,然后对

end_time

字段做索引,这样做应该比较好。

mysql计算1天后的时间_mysql 计算某个时间,多少天后,多少个月后时间戳相关推荐

  1. mysql相隔多长时间_Mysql 计算时间间隔函数

    mysql计算时间差函数 MySql计算两个日期的时间差函数TIMESTAMPDIFF用法,只要用一句SQL语句就可以办到了. MySql计算两个日期的时间差函数TIMESTAMPDIFF用法: 语法 ...

  2. mysql手动写的时间_Mysql日期和时间函数

    对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6 日期和时间类型. 这里是一个使用日期函数的例子.下面的查询选择了所有记录,其date_col的值是在最后30天以内: my ...

  3. 向mysql中添加更新时间_mysql 实现添加时间自动添加更新时间自动更新操作

    在数据库使用中经常使用到时间字段.常用的有创建时间和更新时间. 然而在使用中想要创建时间在创建的时候自动设置为当前时间,更新时间在更新时自动更新为当前时间. 创建表 stu CREATE TABLE ...

  4. mysql获取后一天_mysql获取当前时间,前一天,后一天

    今天是2016年08月01日. date_sub('2016-08-01',interval 1 day) 表示 2016-07-31 date_sub('2016-08-01',interval 0 ...

  5. mysql 计算 两个字段 之差_MYSQL计算两个字段日期差

    一,TIMESTAMPDIFF 语法: TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2). 说明: 返回日期或日期时间表达式datetime_ ...

  6. mysql计算两gps坐标的距离_mysql 计算两坐标间的距离

    mysql 5.6.1 加入了空间数据支持功能,新增了st_*相关函数,可以非常方便的计算两个地理坐标点的距离了. 如下例子:按我的坐标计算周边坐标的距离并由近到远排序 select name,st_ ...

  7. mysql指定当前时间为默认时间_MySQL设置当前时间为默认值的方法

    方法一.是用alert table语句: 复制代码代码如下: use test_db1; create table test_ta1( id mediumint(8) unsigned not nul ...

  8. mysql每一步花费时间_MySQL花费更多时间发送数据

    我有一个特殊的查询,它需要很长时间才能执行,同一表上的其他查询执行得非常快. mysql中启用了Querycache,但是每次下面的查询每次都花费超过80秒,并且CPU利用率超过100%. 我无法修改 ...

  9. mysql计算1000天后的日期_mysql,数据库_mysql 计算某个时间,多少天后,多少个月后时间戳,mysql,数据库,数据库设计 - phpStudy...

    mysql 计算某个时间,多少天后,多少个月后时间戳 id start_time period_ytpe period_value 1 1461427200 day 3 2 1461427200 mo ...

最新文章

  1. 这个 AI 模型火上 GitHub 热榜第一,在线修复照片
  2. 操作系统选择成固定模式 HTML5是潜在方向
  3. poj1201Intervals(差分约束)
  4. 计算机专业教学实施,中职计算机专业教学项目的设计与实施
  5. suitecrm查询功能去掉统配符%
  6. springboot+Thymeleaf生成PDF
  7. linux 网易云音乐 ssh,网易云音乐For Linux的Fedora安装
  8. DCA决策曲线的解读和代码实现
  9. 毫米和像素怎么换算_将mm换算为px (毫米换算为像素)
  10. Matplotlib:面积图、填图、饼图
  11. linux 命令 是mmc 大小,u-boot中mmc命令使用
  12. 二手闲置物品交易获资本肯定,前景一片大好,普通人的商机在哪?
  13. SqlServer数据库应用
  14. 关于计算机知识的内容500字,介绍电脑的作文500字
  15. 受尽苦难而不厌_信息安全工程师正在为确保我们的安全而苦难
  16. ar71xx php-fpm,ar71xx和ar93xx平台所有8M固件!!nwan,aria2,qos,samba,tr,cpulimit-ng,等等...
  17. 浩辰CAD看图王手机版中添加的图片批注在电脑端如何查看?
  18. 元宇宙(metaverse)的认知记录
  19. 如何从一个空有上进心的人,变成行动上的巨人?
  20. Raspberry pi音乐播放器omxplayer

热门文章

  1. 能量视角下的GAN模型(二):GAN=“分析”+“采样”
  2. java第六章工具包P6-03.Optional 2020.4.?
  3. python知识点总结(有空就往里面添加)
  4. 拉取数据_Apache Kafka-数据写入过程
  5. 电脑声音推送到手机话筒_一台电脑是不是就能做在线教育直播了?
  6. 【虚拟化】Linux中安装配置Docker
  7. 机器学习(二)监督学习
  8. LeetCode 12 整数转罗马数字
  9. OFFICE——Word与Excel交互处理——邮件合并
  10. 高校学院计算机实验室管理系统概述,高校实验室管理系统