2012-06-20 92 views
2

当我是PHP的初创学生时,我使我的数据库一起存储日期和日期,现在我遇到了一个大问题,我已经在数据库中存储了超过3000个订单,但是当我想要使用日期搜索我是一件很麻烦的事情,因为日期和时间在一个字段中,我试图让查询变成where date LIKE '%$date',但我没有收到任何结果,有没有人知道我现在可以做什么?在数据库中搜索日期PHP

而且我怎样才能改变整个数据库它应该是所有的日期和时间分开,它不应该影响我的数据库?

UPDATE:

在数据库中的数据的样子,10/16/2012 5:00pm

得到任何帮助。

+3

您可以显示数据的一个例子,就是返回日期如何从数据库? –

+0

我更新了问题。 – thegrede

+0

那么,日期和时间不应该是单独的,但一个'DATETIME'列会想到,你似乎使用基于varchar /其他字符串/字符的列,如果我阅读这个权利... – Wrikken

回答

2

在回答你的问题的部分:

找到你在当前模式所需要的日期。

根据您的编辑,请使用:

<?php 

$query = "SELECT * FROM table_name WHERE `date` LIKE '{$date}%'"; 

?> 

类似于你贴什么可以帮助你的查询:

<?php 

$query = "SELECT * FROM table_name WHERE `date` LIKE '%{$date}%'"; 

?> 

请注意,你在你的问题的 %使用( '%$date' )只会匹配以 $date结尾的值,而我的示例(​​)中的模式将匹配 $date其中任何位置的值。或者,您可以使用 '{$date}%'在值的开头匹配日期 - 不确定您想要的。

2.更新您的模式以将日期和时间分成两列。

您应该在这里采取的第一步是将两列(date_onlytime_only)添加到您的表中。接下来,更新您的代码以处理并将此信息另外存储到您当前正在使用的'all-in-one'date列;您不想通过一步切换来打破当前的代码库。一旦您可以验证日期/时间数据是按照您希望的方式编写的,则第三步是从新的日期/时间列中读取(并记录)以及生产读数到date。一旦您可以验证读取是否按计划运行,切换您的开发环境以从新列中读取数据并进行测试,直到您确信一切正常。

2

你可以做到以下几点:

$date = "2012-03-08"; 
$sql = "SELECT * FROM table WHERE date => '$date 00:00:00' AND date =< '$date 23:59:59' 

编辑:看到您的编辑,这不工作了。您需要将日期列转换为适当的MySQL日期时间或TIMESTAMP类型。

在当前的数据库设计,你可以使用这样的事情:

日期

$date = "10/16/2012"; 
$sql = "SELECT * FROM table WHERE date LIKE '$date%' 

时间

$time = "5:00pm"; 
$sql = "SELECT * FROM table WHERE date LIKE '%$time' 
+0

感谢这个好主意,但安德鲁Kozak也回答我的第二个问题 – thegrede

5

为何%$日期?你应该做相反的事情。

WHERE date LIKE "".$date."%" 
1

如果它是一个日期时间字段,你可以使用

WHERE DATE(datetime_field) = '01-01-2012'; 

或(更好,因为它可以使用索引)

WHERE datetime_field >= '01-01-2012 00:00:00' AND datetime_field <= '01-01-2012 23:59:59';