【问题标题】:How to convert sql query for MS Access in ODBC如何在 ODBC 中为 MS Access 转换 sql 查询
【发布时间】:2014-06-20 17:29:57
【问题描述】:

下面是表格图片

我的查询如下,

$DB2->query("SELECT CHECKINOUT.USERID,USERINFO.CardNo FROM CHECKINOUT INNER JOIN USERINFO ON CHECKINOUT.USERID = USERINFO.USERID WHERE CHECKTIME BETWEEN '$start_date' AND '$tommorow' AND USERINFO.CardNo NULL")

我想像下面这样在 ODBC 中进行查询

$DB2->query("SELECT CHECKINOUT.USERID,USERINFO.CardNo FROM CHECKINOUT INNER JOIN USERINFO ON CHECKINOUT.USERID = USERINFO.USERID WHERE format(CHECKTIME, 'dd/mm/yyyy') BETWEEN '$ start_date' AND '$tommorow' AND USERINFO.CardNo NULL")

但是 ODBC 的查询并不完美,它带有日期差异数据的所有日期数据。

如何在 ODBC FOR MS ACCESS 数据库中进行完美查询。

请给我任何解决方案。

【问题讨论】:

  • 为什么要使用格式?你的日期实际上是字符串吗?
  • 查询将用于获取日期,我将只输入日期(不是日期时间)。由于这些原因,我使用了日期格式。请有任何建议。
  • 格式将日期转换为字符串。如果您打算使用它并且不应该使用它,那么所有三个日期都必须采用相同的格式,并且必须在年月日(或年月日)中并带有前导零,否则它将永远无法工作。永远记住 '04/05/2013' 不是日期而是字符串。从您的查询中取出格式函数,看看会发生什么,我只能根据您提供的信息从这里猜测。

标签: php codeigniter ms-access odbc


【解决方案1】:
    SELECT CHECKINOUT.USERID,USERINFO.CardNo FROM CHECKINOUT
    INNER JOIN USERINFO ON CHECKINOUT.USERID = USERINFO.USERID
    WHERE CHECKTIME
    BETWEEN #$start_date# AND #$tommorow# AND USERINFO.CardNo <> NULL

我从您的屏幕图像中看到 CHECKTIME 是一种日期时间数据类型。如果要将查询发送到 MS-Access,日期必须用磅符号 (#) 而非单引号括起来。您不需要将它们格式化为字符串,除非您另外指定,否则使用日期的默认值为午夜 (00:00)。

最好的解决方案是将此查询粘贴到 MS-Access 查询设计器中,并确保它为您提供预期的结果。如果做不到这一点,请在 MS-Access 设计器中创建查询并查看它返回的 SQL 格式。

请注意,如果您说的是开始日期和明天之间,例如 2014 年 5 月 6 日 00:00 到 2014 年 5 月 7 日 00:00。所以这取决于你所说的“明天”(一天的开始或一天的结束)是什么意思。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    相关资源
    最近更新 更多