Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP从MySql数据库中选择两个日期之间的记录_Php_Javascript_Mysql - Fatal编程技术网

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

使用PHP从MySql数据库中选择两个日期之间的记录,php,javascript,mysql,Php,Javascript,Mysql,在我的项目中,我生成并存储账单(发票)。 在保存之前,账单日期将从javascript日期选择器(小型弹出日历)进入文本框。 日期格式为:DD-MON-YYYY(2013年6月18日)。 我使用“Text”数据类型在MySql表中存储日期 我已经在给定的单一日期从表中选择了记录(以前的账单),如 $result=mysql_查询(“选择*FROM outlook WHERE date=”“$date.”“ORDER BY billNo”) 现在,我想做的是: 要选择两个日期之间的记录(票据) 我

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

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

我已经在给定的单一日期从表中选择了记录(以前的账单),如

$result=mysql_查询(“选择*FROM outlook WHERE date=”“$date.”“ORDER BY billNo”)

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

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

p.s.-使用
1.“从日期介于“”之间的位置向外选择*”$从那时起。“‘和’”$迄今为止。“‘按id说明订购’

2.从“2013年6月15日”和“2013年6月18日”的日期中向外选择*


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


然后,您可以使用
进行有效查询,如果是
日期列,则可以使用以下方法获取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'
其中日期>='2013-06-15'和日期<'2013-06-19'
如果对
date
列编制了索引,这种方法将确保索引可用于优化。如果它没有索引,那么该方法与其他许多方法一样快

附录:刚刚在所有其他信息中看到“存储为文本”。请注意,此答案仅适用于类型为
DATE
DATETIME
的情况。我将不讨论这个问题,因为最好的答案是更改列的数据类型,然后使用此选项或其他建议的选项之一

我使用“文本”数据类型在MySql表中存储日期

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

如果将数据类型更改为date,则执行以下操作:

select x,y,z from table a where a.datecolumn between @startdate and @enddate 
应该行得通

如果使用文本数据类型,则必须将该列强制转换为日期列,然后应用日期选择范围,由于强制转换,该范围将变慢


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

您说您使用的是
文本
列来存储日期。这是一个极坏的主意。如果您切换到
日期
日期时间
,那么这将变得微不足道。

您可以用纯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'

因为您将其存储为文本,但希望SQL将其解析为日期,但SQL一开始并不理解

在您的示例中,SQL将使用文本比较规则。因此,4月15日<3月15日>15-12月


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

是类型为
Date
DATETIME
Date列吗?您必须更改日期格式以使用日期字段yyyy-mm-dd这是正确的答案,但我不会使用它,因为将日期存储为文本毫无意义。正如Brian指出的,这个问题并非如此fast@Pinoniq-我希望在将日期字段存储为文本之前被枪杀:)这里有一个问题-我没有像2013-06-20那样存储日期。2013年6月20日,使用“文本”数据类型。我想我必须使用日期数据类型存储日期。在存储和检索时..必须处理'20-Jun-2013'格式..@Vikram-同样,我不是在宽恕这一点,但SQL发布的转换自'20-Jun-2013'。那是在小提琴上