使用MySql数据库中的PHP选择两个日期之间的记录

时间:2013-06-18 19:03:50

标签: php javascript mysql

在我的项目中,我正在生成并存储账单(发票)。 在保存之前,Bill的日期将从javascript日期选择器(小弹出日历)进入文本框。 日期格式为:DD-MON-YYYY(18-JUN-2013)。

我使用'文字'数据类型在MySql表格中存储日期。

我已经通过给定的单个日期从表中选择了记录(Previous Bills)。 。

  

$ result = mysql_query(“SELECT * FROM outward WHERE date ='”。$ date。“'ORDER BY billNo”);

现在,我想做的是: 选择两个日期之间的记录(票据).....

  

我的确切问题是:   是否可以使用此设置查询mysql数据库,或者我必须进行一些更改以有效地选择2个日期之间的记录?   我怎样才能做到这一点?

     

P.s。 - 使用
是否有效    1。“SELECT * FROM OUT WHERE date BETWEEN'”。 $ from_date。 “'和'”。 $ to_date。 “'由DES DESC订购'
  或
   2。 SELECT * FROM outside WHERE date> “15-JUN-2013”​​和日期< “18-JUN-2013”​​

6 个答案:

答案 0 :(得分:1)

您可以使用纯SQL方式执行此操作,但是您必须为每个查询执行全表扫描。

select the_dates,
  STR_TO_DATE(the_dates, '%d-%M-%Y') as converted
from testing
  where STR_TO_DATE(the_dates, '%d-%M-%Y') between '2013-06-20' and '2013-06-23'

Link to SQLFiddle

答案 1 :(得分:0)

您应该使用strtotime PHP函数将字符串日期转换为UNIX时间戳格式,并将日期字段的MySQL数据类型更改为TIMESTAMP

您可以使用><进行有效查询。

答案 2 :(得分:0)

如果是DATE列,您可以使用以下内容获取2013年6月15日至2013年6月18日(含)之间的所有日期:

WHERE date BETWEEN '2013-06-15' AND '2013-06-18'

如果是DATETIME列,请改为:

WHERE date >= '2013-06-15' AND date < '2013-06-19'

如果date列已编制索引,则此方法将确保索引可用于优化。如果它没有编入索引,那么这种方法与其他许多方法一样快。

附录:刚看到所有其他喊叫信息中的“存储为文本”。请注意,此答案仅适用于类型为DATEDATETIME的情况。我会保留它,因为最好的答案是更改列的数据类型,然后使用此或其他建议的选项之一。

答案 3 :(得分:0)

  

我使用'Text'数据类型在MySql表中存储日期。

这是一个问题。您应该在MySQL中将日期存储为datedatetime数据类型。如果您不关心时间部分,date就足够了。

如果您将数据类型更改为日期,请执行以下操作:

select x,y,z from table a where a.datecolumn between @startdate and @enddate 

应该可以正常工作。

如果使用文本数据类型,则必须将列强制转换为日期列,然后应用由于强制转换而导致速度较慢的日期选择范围。

始终将数据存储在与其类型匹配的数据类型中。如果是日期,那么是日期列,如果是文本,则是文本或varchar等。应用的表示层可能会担心将此数据呈现给用户的格式

答案 4 :(得分:0)

您说您使用TEXT列来存储日期。这是一个非常糟糕的主意。如果您切换到DATEDATETIME,那么这就变得微不足道了。

答案 5 :(得分:0)

由于您将它作为文本存储,但您希望SQL将其解析为SQL首先不理解的DATE。

在您的示例中,SQL将使用TEXT比较规则。所以4月15日&lt; 15-Mar&gt; 15-DEC

如果要在SQL数据库中存储日期,则应将其存储为日期而不是TEXT。