2012-06-14 143 views
0

谁能告诉我如何使用PHP在MS.ACCESS数据库中按日期选择数据? 我想选择的示例数据(没有= 2012/6/14 13:00:00)使用通配符(缺席= 14/06/2012 *)通过odbc数据库中的DATE查询选择数据

这里是我的查询

$sql = "SELECT TOP 1 * FROM absent WHERE id = $id AND absent LIKE '#14/06/2012#'" 
$result = odbc_exec($connect, $sql); 

缺席字段有日期(常规日期)类型。而id = AutoNumber。

我没有得到任何结果,使用该查询。我的错误在哪里?

已经开始尝试这种

absent = #14/06/2012# 
absent = '14/06/2012*' 

但没有成功。

编辑 那么,我已经成功,但没有使用通配符。这里是我的解决方案,我使用范围日期来限制搜索

WHERE absent >= #14/06/2012 AND absent < #15/06/2012#; 

该死的你Ms-Access!

+1

缺席是DATE格式? –

+0

@ElzoValugi是缺席是DATE格式,我的问题,如何使用通配符按日期选择数据与PHP?你可以帮我吗?我卡住了,已经尝试了所有的可能性。 – yudayyy

+1

当日<= 12时,您将遇到问题。然后访问会将日视为月。尝试一下。在MS Access中,您可以在两者之间使用。所以'#2012/06/14#和#2012/06/15#之间没有# – Fionnuala

回答

1

我不能尝试我的答案,因为我没有PHP可用,但这里有几个想法 (假设缺席是一个日期字段)。

  • LIKE进行字符串比较,所以在使用LIKE时不会包含#。
  • 出于同样的原因,你一定要包括引号'"否则你将得到一个部门
  • 这是美国所有的产品,所以我会尝试以mm/dd/yyyy格式的日期

有前面我的猜测是absent LIKE '06/04/2012*'

其他 - 也许是效率较低,但更安全 - 标准可以是:

...AND day(absent) = 14 AND month(absent) = 6 AND year(absent) = 2012 

... AND Format(Absent, "dd\/mm\/yyyy") = "14/06/2012" 

好运

2

您已经包括两种类型的分隔符,字符串和日期。在MS Access中的查询将是:

$sql = "SELECT TOP 1 * FROM absent WHERE id = $id AND absent = #2012/06/14#" 

最好使用年份日格式,因为它避免了语言环境格式的任何矛盾。

+0

+1,我从来不知道那个技巧 –

4

当您通过ODBC在MS Access查询时间字段的ODBC驱动程序将其转换为例如时间戳:

select * from table where col=#2012-06-15# 

这是转换成{TS“2012-06-15 00:00:00 '}所以你只会在这个值为真的情况下得到一个匹配。

你的使用范围答案是更好的,但是你真的应该使用: -

select * from table where col>{d '2012-06-15'} and col<{d '2012-06-16'} 

使用的{d 'yyyy-mm-dd'}的ODBC格式将意味着你的代码将被移植到大多数其他的ODBC驱动程序不只是MS访问。

+0

我在查询一个dbase III文件并使用{d'yyyy-mm-dd '}适合我。尝试#yyyy-mm-dd#会产生一条错误消息,指出我缺少操作数。 –

+0

这个小珍闻:{d'2012-06-15'} << gold。谢谢。查找关于ODBC怪癖的信息是一个有点挑战性的问题,经过大量搜索后,这个问题解决了我的问题。 –