在我的项目中,我正在生成并存储账单(发票)。 在保存之前,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”
答案 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'
答案 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
列已编制索引,则此方法将确保索引可用于优化。如果它没有编入索引,那么这种方法与其他许多方法一样快。
附录:刚看到所有其他喊叫信息中的“存储为文本”。请注意,此答案仅适用于类型为DATE
或DATETIME
的情况。我会保留它,因为最好的答案是更改列的数据类型,然后使用此或其他建议的选项之一。
答案 3 :(得分:0)
我使用'Text'数据类型在MySql表中存储日期。
这是一个问题。您应该在MySQL中将日期存储为date
或datetime
数据类型。如果您不关心时间部分,date
就足够了。
如果您将数据类型更改为日期,请执行以下操作:
select x,y,z from table a where a.datecolumn between @startdate and @enddate
应该可以正常工作。
如果使用文本数据类型,则必须将列强制转换为日期列,然后应用由于强制转换而导致速度较慢的日期选择范围。
始终将数据存储在与其类型匹配的数据类型中。如果是日期,那么是日期列,如果是文本,则是文本或varchar等。应用的表示层可能会担心将此数据呈现给用户的格式。
答案 4 :(得分:0)
您说您使用TEXT
列来存储日期。这是一个非常糟糕的主意。如果您切换到DATE
或DATETIME
,那么这就变得微不足道了。
答案 5 :(得分:0)
由于您将它作为文本存储,但您希望SQL将其解析为SQL首先不理解的DATE。
在您的示例中,SQL将使用TEXT比较规则。所以4月15日&lt; 15-Mar&gt; 15-DEC
如果要在SQL数据库中存储日期,则应将其存储为日期而不是TEXT。