mysql日期范围在较小的日期之前具有较大的日期

时间:2017-06-16 17:51:25

标签: mysql database date

我希望存储日期范围,以允许营业时间以日期范围为条件,以适应季节性变化。我使用以下条件

date_start < CURDATE() AND date_end > CURDATE()

问题是如果开始日期(9月)大于结束日期(6月)

在我的数据库中,我将日期(2017-07-01)存储为日期,但年份无关紧要(我甚至不给用户提供选择输入年份的机会)。我只是将它存储为验证目的的日期(如果有更好的方法我可以用它)。在上面的示例中,范围介于上一年的9月到当年的6月之间。我怎样才能适应这一点而不依赖于这一年。请记住,日期范围可能只是同一年的1月到2月,所以我需要灵活性。

我想我可以将日期转换为数学数字并查看值是否大于或等于但这似乎是相当多的开销。

有什么方法可以查询数据库以确定当前日期是在正确的开始日期和结束日期之间?

2 个答案:

答案 0 :(得分:0)

(date_start < date_end AND date_start < CURDATE() AND date_end > CURDATE()) OR (date_start > date_end AND (date_start > CURDATE() OR CURDATE() < date_end))

可能有帮助

答案 1 :(得分:0)

啊哈!

使用你的测试想法实际上在彼此之前的日期,我们提出了以下条件

( date_start < date_end AND date_start < CURDATE() AND date_end > CURDATE() ) OR ( date_start > date_end AND (date_start > CURDATE() AND CURDATE() < date_end) )

然而,这需要将年份考虑在内,这是不可取的

然后我想,如果我们格式化每个curdate以有效地删除年份,如

DATE_FORMAT(CURDATE(), '0000-%m-%d') 
然后我会用上面的方法替换每个curdate(假设我将数据库中的日期存储为0000-mm-dd)。我不喜欢这个,因为我一次又一次地重新计算相同的数字。我想也许我可以用金额存储一个别名,但是在连接语句中我不能这样做。因此我的解决方案是php和mysql占位符的组合。

我使用php来查找当前日期一次并在占位符中使用它

$data = date('0000-m-d', time );

我将原始陈述中的条件调整为     (date_start&lt; date_end AND date_start&lt;:c AND date_end&gt;:c)OR(date_start&gt; date_end AND(date_start&gt;:c AND:c&lt; date_end))

并将变量$ date添加到我的sql数组和bingo!