mysql中关于时间点的判断

最近做一个项目遇到这样一个问题:

有一条关于超市活动的字段,这条活动比如开始时间是2013-10-7 结束时间是2013-10-15,存储到数据库mysql中的时候存储的都是当前日期的时间戳,使用php的strtotime()这个函数,而使用这个函数存储的当然是当前日期第0:0:0这个时间点的时间戳,实际上2013-10-15这天活动在当天的24小时以内还是有效的,并不是到当天的0:0:0就失效。

所以在做contab的时候就需要面临这么一个问题,不能使用时间戳做判断,而必须使用当前日期为几号来判断这条活动是否过期。比如每天凌晨1点做contab,搜寻数据库,15号凌晨这天的日期号为15,不大于过期日期,所以不设置这条记录过期,16号凌晨判断,当前日期号大于过期日期,那么这条记录设置为过期。

具体时间可以这么操作:

mysq中 DATE_FORMAT(now(), '%Y-%m-%d %H:%i:%s');返回格式化后的日期

TO_DAYS(时间戳)返回该时间戳下的日期号,

TO_DAYS(NOW()) - TODAYS(过期时间戳) >0 那么则判断为失效

MySQL中,判断两个时间段是否有交集通常需要将时间范围转换成数据库可以理解的数据结构,比如开始时间和结束时间的两个字段。如果你有两个时间段,例如`start_time`和`end_time`,你可以这样做: 1. **创建查询条件**: 对于两个时间段A(start_a, end_a)和B(start_b, end_b),你可以检查它们是否满足以下条件之一来确定是否有交集: - `start_a <= start_b AND end_b <= end_a` - `start_b <= start_a AND end_a <= end_b` - `start_a <= end_b AND start_b <= end_a` 2. **使用`BETWEEN`操作符**: 另一种方法是利用`BETWEEN`操作符来检查某个时间点是否在这两个区间内,如果两个区间都包含这个时间点,则说明有交集。 3. **临时表或子查询**: 如果数据量较大,你也可以先创建临时表或者使用子查询,存储每个时间段的边界,然后通过比较这些来找出交集。 ```sql -- 示例查询 SELECT CASE WHEN (start_a BETWEEN start_b AND end_b) OR (start_b BETWEEN start_a AND end_a) THEN '有交集' ELSE '无交集' END AS intersection_status FROM ( SELECT @start_a := '时间段A的起始时间', @end_a := '时间段A的结束时间' AS interval_a, @start_b := '时间段B的起始时间', @end_b := '时间段B的结束时间' AS interval_b ) subquery; ``` 请注意,上述示例假设你有一个变量形式的时间段A和B可以直接赋值。在实际应用中,你需要替换为实际的时间字段
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值