【问题标题】:Query for select data by DATE in odbc database在 odbc 数据库中按 DATE 查询选择数据
【发布时间】:2012-06-14 06:32:00
【问题描述】:

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

该死的女士访问!

【问题讨论】:

  • absent 是 DATE 格式吗?
  • @ElzoValugi 是的,缺席是 DATE 格式,我的问题是,如何使用 PHP 通配符按日期选择数据?你能帮助我吗?我被卡住了,已经尝试了所有的可能性。
  • 当日 WHERE absent between #2012/06/14# AND #2012/06/15#;

标签: php ms-access


【解决方案1】:

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

【讨论】:

  • 我正在查询一个 dbase III 文件并使用 {d 'yyyy-mm-dd'} 对我有用。尝试 #yyyy-mm-dd# 会导致错误消息指出我缺少操作数。
  • 这个小花絮:{d '2012-06-15'}
【解决方案2】:

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

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

最好使用年月日格式,因为这样可以避免与语言环境格式产生矛盾。

【讨论】:

    【解决方案3】:

    我无法尝试我的答案,因为我没有可用的 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"
    

    祝你好运

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-17
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多