【问题标题】:MS Access, Query that selects * from db from 6AM to 6AM next dayMS Access,从早上 6 点到第二天早上 6 点从 db 中选择 * 的查询
【发布时间】:2016-09-06 20:17:05
【问题描述】:

我正在做大量的方法来让它发挥作用。 我需要根据表dbAwarieZamkniete生成报告。

我需要从dbAwarieZamkniete 中获取ALL,所以当我从访问表单中的文本框中选择short date 时,我想运行query 来获取数据。

假设我需要 10.05.2016 的记录,这意味着我需要从 10.05.2016 06:00 到 11.05.2016 06:00 的记录。

我的方法不一样,例如我试过union,我不会把它们都贴在这里,它只是一个例子:

SELECT *
FROM   dbAwarieZamkniete AS AwaZam
WHERE  Format(AwaZam.dataZgloszenia, "d-m-yyyy") = '03.09.2015'
AND ( Format(AwaZam.godzinaZakonczenia, 'hh:mm') BETWEEN '06:00' AND '23:59' )

UNION ALL

SELECT *
FROM   dbAwarieZamkniete AS AwaZam
WHERE  Format(AwaZam.dataZgloszenia, "d-m-yyyy") = '04.09.2015'
AND (( Format(AwaZam.godzinaZakonczenia, 'hh:mm') BETWEEN '00:00' AND '06:00' );

dataZgloszenia 包含日期(作为 d.m.yyyy)- 短日期

godzinaZgloszenia 包含时间(如 h:m)- 短时间

【问题讨论】:

  • 难道你不能同时拥有日期和时间的日期时间字段吗?
  • 如果某台机器出现故障,人们正在为维修部门制作一份事故表(短信也是通过ms访问工人手机发送的)。在他们完成修复后,他们手动编辑时间(用于收集修复机器所用的时间,然后报告此类机器从早上 6 点到早上 6 点没有工作多长时间)。这就是为什么我把时间分开。
  • 联盟没有按您的预期工作吗?
  • 这个联合不知何故让我得到了不同日子的结果,而不仅仅是我想要的范围。而不是像 10 条记录,我从大的时间框架(甚至来自不同的月份)中得到了 600 条。
  • 让我们知道表格字段的格式。日期和时间是否保存为文本?还是日期/日期时间/时间?

标签: sql date ms-access-2010


【解决方案1】:

始终将日期处理为日期,而不是文本,没有例外。

所以:

SELECT *
FROM   dbAwarieZamkniete AS AwaZam
WHERE  AwaZam.dataZgloszenia + AwaZam.godzinaZakonczenia
       Between 
           DateAdd("h", 6, #2016/05/10 00:00:00#)
           And
           DateAdd("h", 6 + 24, #2016/05/10 23:59:59#)

使用文本框中的日期:

SELECT *
FROM   dbAwarieZamkniete AS AwaZam
WHERE  AwaZam.dataZgloszenia + AwaZam.godzinaZakonczenia
       Between 
           DateAdd("h", 6, DateValue([Forms]![YourForm]![YourTextbox]))
           And
           DateAdd("h", 6 + 24, DateValue([Forms]![YourForm]![YourTextbox]) + #23:59:59#)

【讨论】:

  • 这也给了我空白的结果。我真的不明白问题出在哪里。
  • 好吧,那么您没有 2016-05-10 的日期/时间。尝试另一个日期。
  • dataZgloszenia 存在于 03.05.2015 例如,我编辑了查询 ofc imgur link,它的结构是:imgur link
  • 日期格式为短日期,时间格式为短时间
  • 哦,好吧,我开始工作了,删除了 DateAdd 的秒数,没看到那个。谢谢你,不知何故,我确信只有联合方法才能解决我的问题。
【解决方案2】:
  1. 您将日期设置为d.m.yyyy,但在您使用的代码中 d-m-yyyy

    SELECT *
    FROM   dbAwarieZamkniete AS AwaZam
    WHERE  Format(AwaZam.dataZgloszenia, "d.m.yyyy") = '03.09.2015'
    AND ( Format(AwaZam.godzinaZakonczenia, 'hh:mm') BETWEEN '06:00' AND '23:59' )
    
    UNION ALL
    
    SELECT *
    FROM   dbAwarieZamkniete AS AwaZam
    WHERE  Format(AwaZam.dataZgloszenia, "d.m.yyyy") = '04.09.2015'
    AND (( Format(AwaZam.godzinaZakonczenia, 'hh:mm') BETWEEN '00:00' AND '06:00' );
    
  2. 如果需要,您可以将这两个条件结合在一起。

    SELECT *
    FROM   dbAwarieZamkniete AS AwaZam
    WHERE (
        Format(AwaZam.dataZgloszenia, "d.m.yyyy") = '03.09.2015' 
        AND 
        (Format(AwaZam.godzinaZakonczenia, 'hh:mm') BETWEEN '06:00' AND '23:59' )
          )
    
    or (
        Format(AwaZam.dataZgloszenia, "d.m.yyyy") = '04.09.2015' 
        AND 
        ( Format(AwaZam.godzinaZakonczenia, 'hh:mm') BETWEEN '00:00' AND '06:00' )
        )
    

【讨论】:

  • 你的查询给了我空的结果。
  • 再次尝试第一个查询。假设您的查询的其余部分是正确的,除了日期格式,它应该可以工作。
  • 第二次查询再次给我空结果,第一次在某处包含语法错误。
猜你喜欢
  • 2018-11-10
  • 2013-03-08
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 2015-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多