使用PHP从MySql数据库中选择两个日期之间的记录
在我的项目中,我生成并存储账单(发票)。 在保存之前,账单日期将从javascript日期选择器(小型弹出日历)进入文本框。 日期格式为:DD-MON-YYYY(2013年6月18日)。 我使用“Text”数据类型在MySql表中存储日期 我已经在给定的单一日期从表中选择了记录(以前的账单),如 $result=mysql_查询(“选择*FROM outlook WHERE date=”“$date.”“ORDER BY billNo”) 现在,我想做的是: 要选择两个日期之间的记录(票据) 我的确切问题是: 是否可以使用此设置查询mysql数据库,或者我必须进行一些更改以高效地选择两个日期之间的记录? 我怎样才能做到这一点 p.s.-使用使用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”) 现在,我想做的是: 要选择两个日期之间的记录(票据) 我
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'。那是在小提琴上