2017-06-16 121 views
0

我想存储日期范围以允许在日期范围内有条件的日期范围以适应季节变化。我用的是以下条件mysql日期范围与较大日期之前的较大日期

date_start < CURDATE() AND date_end > CURDATE() 

这里的问题是,如果开始日期在结束日期较大(月)(6月)

在我的数据库,我存储的日期(2017- 07-01)作为一个日期,但这一年是不相关的(我甚至没有给用户一个选择一年的机会)。我只是将它作为验证日期进行存储(如果有更好的方法,我会为它做准备)。在上面的示例中,范围介于上一年的九月至今年的六月之间。我怎样才能适应这一点,而不依赖于一年。请记住,日期范围可能仅仅是同年的一月到二月,所以我需要灵活性。

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

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

+0

使用case语句 – Strawberry

+0

条件是在一个连接语句 – iPoo

回答

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)) 

可能是这有助于

+0

问题是如果我将日期存储为0000-06-17或2017-06-17并从curdate()生成一年,如果会最终将不会正常工作,因为curdate()的年份总是会变得更大 – iPoo

+0

虽然我喜欢它的开始。我甚至没有考虑过测试哪个存储日期更大,然后根据它调整条件。 – iPoo

+0

您可以设定年份 - 例如2017。在数据库中存储2017年,不要使用CURDATE() - 而是使用基于2017年的“当前日期”。或者,也许,您可以更改存储日期范围的方式 - 仅存储月份和日期。 –

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(假设我是storin g数据库中的日期为0000-mm-dd)。我不喜欢这个,因为我一次又一次地重新计算相同的数字。我想也许我可以存储一个别名的数额,但在加入声明我不能这样做。因此我的解决方案是php和mysql占位符的组合。

我用户的PHP找出当前日期一次,并用它在一个占位符

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

我调整原稿语句条件 (DATE_START < DATE_END和DATE_START <:C和DATE_END> :c)OR(date_start> date_end AND(date_start>:c AND:c < date_end))

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