谁能告诉我如何使用PHP在MS.ACCESS数据库中按日期选择数据? 我正在尝试使用通配符选择数据(absent = 14/06/2012 13:00:00)(absent = 14/06/2012 *)
这是我的查询
$sql = "SELECT TOP 1 * FROM absent WHERE id = $id AND absent LIKE '#14/06/2012#'"
$result = odbc_exec($connect, $sql);
缺席字段具有日期(常规日期)类型。而id =自动编号。
使用该查询我没有结果。我的错误在哪里?
已经尝试过这个
absent = #14/06/2012#
absent = '14/06/2012*'
但没有成功。
修改 好吧,我已经成功但没有使用外卡。这是我的解决方案,我使用范围日期来限制搜索
WHERE absent >= #14/06/2012 AND absent < #15/06/2012#;
该死的Ms-Access!
答案 0 :(得分:4)
当您通过ODBC在MS Access中查询日期时间字段时,ODBC驱动程序会将其转换为时间戳,例如:
select * from table where col=#2012-06-15#
这将转换为{ts'2012-06-15 00:00:00'},因此您只能获得该值为true的匹配。
您使用范围的答案会更好,但您确实应该使用: -
select * from table where col>{d '2012-06-15'} and col<{d '2012-06-16'}
使用{d 'yyyy-mm-dd'}
的ODBC格式意味着您的代码可以移植到大多数其他ODBC驱动程序而不仅仅是MS Access。
答案 1 :(得分:2)
您已经包含了两种类型的分隔符,包括字符串和日期。 MS Access中的查询将是:
$sql = "SELECT TOP 1 * FROM absent WHERE id = $id AND absent = #2012/06/14#"
最好使用年月日格式,因为它避免了语言环境格式的任何矛盾。
答案 2 :(得分:1)
我无法尝试我的答案,因为我没有可用的PHP,但这里有一些想法 (假设Absent是Date字段)。
'
或"
,否则您将获得分组我的猜测是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"
祝你好运