0

谁能告诉我如何使用 PHP 在 MS.ACCESS 数据库中按日期选择数据?我正在尝试使用通配符 (absent = 14/06/2012*) 选择数据,例如 (absent = 14/06/2012 13:00:00)

这是我的查询

$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!

4

3 回答 3

6

当您通过 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'}

使用 ODBC 格式{d 'yyyy-mm-dd'}意味着您的代码将可移植到大多数其他 ODBC 驱动程序,而不仅仅是 MS Access。

于 2012-06-15T10:46:53.723 回答
2

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

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

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

于 2012-06-14T09:44:46.510 回答
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"

祝你好运

于 2012-06-14T07:35:12.307 回答