【问题标题】:Get records from DB searching a period between two dates从数据库中获取记录,搜索两个日期之间的时间段
【发布时间】:2012-11-20 14:00:05
【问题描述】:

我正在尝试从 mysql 中获取包含在两个日期之间某个时间段内的记录(这两个日期分别是 date_start、date_end 并存储在两个不同的列中)。

我现在在选择查询中所做的是:

   .. WHERE MONTH(date_start) >= '".$month_start."' and DAY(date_start) >= '".$day_start."'" AND MONTH(date_end) <= '".$month_end."' and DAY(date_end) <= '".$day_end."'"

该查询有效,但仅在某些情况下有效,根本无效!

有什么建议吗?

此处的表格示例:

id_period;date_start;date_end; 27;0000-04-02;0000-05-31;

|| *id_period* || *日期开始* || *日期结束* || || 41 || 0000-11-01 || 0000-11-30 ||

【问题讨论】:

  • month_start、day_start 等的输出是什么?你能输出打印的查询吗?这将有助于某人提供答案,因为可能有多种原因。
  • month_start = 09 day_start = 01 month_end = 12 day_end = 31

标签: php mysql date calendar datepicker


【解决方案1】:

为什么不使用BETWEEN

SELECT ...
FROM...
WHERE your_date BETWEEN date_start AND date_end

【讨论】:

  • 我找不到使用 between 的解决方案,因为当我从 datepicker 日历中获取值时,我使用 2 个日期:date_start 和 date_end,而不仅仅是 1 个特定日期。请帮忙
  • 试试(your_date1 BETWEEN date_start AND date_end) OR (your_date2 BETWEEN date_start AND date_end)
  • 您可以添加示例数据/记录吗?
  • 试过这个:WHERE ('01-09-2012' BETWEEN date_start and date_end) OR ('31-10-2012' BETWEEN date_start and date_end) 不起作用:(
  • 你需要使用yyyy-MM-dd格式,顺便问一下date_startdate_end的数据类型是什么?再试一次WHERE ('2012-09-01' BETWEEN date_start and date_end) OR ('2012-10-31' BETWEEN date_start and date_end)
【解决方案2】:

尝试DATE_FORMAT 函数,而不是使用 MONTH 和 DAY。请确认 db 中的日期为 date 格式

【讨论】:

  • 是的,日期是 DATE 格式,你能解释一下如何使用 DATE_FORMAT 吗?
  • 试试这个 WHERE DATE_FORMAT(date_start,'%c') >= '".$month_start."' and DATE_FORMAT(date_start,'%d') >= '".$day_start."' " AND DATE_FORMAT(date_end,'%c')
  • 试过这个:WHERE (DATE_FORMAT('01-09-0000','%c') >= '09' and DATE_FORMAT('01-09-0000','%d') > = '01') AND (DATE_FORMAT('31-12-0000','%c')
  • 在where子句中,应该是DATE_FORMAT(date_start,'%c'),而不是DATE_FORMAT('01-09-0000','%c')
  • 是的,我也尝试将日期格式从 '01-09-0000' 更改为 '0000-09-01' .. 仍然没有
猜你喜欢
  • 2020-02-06
  • 2011-08-12
  • 2013-10-19
  • 2020-01-26
  • 2019-03-14
  • 2019-06-15
  • 2012-05-01
  • 2011-11-25
  • 1970-01-01
相关资源
最近更新 更多