在odbc数据库中通过DATE查询选择数据

时间:2012-06-14 06:32:01

标签: php ms-access

谁能告诉我如何使用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!

3 个答案:

答案 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字段)。

  • 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"
祝你好运