SQL查询以选择记录,其中日期字段是某个星期数

时间:2018-11-07 10:36:09

标签: ms-access jet

我的应用程序没有自己的“脚本语法”。它旨在使用JET从Microsoft Access数据库创建简单的报表。这是一个简单的示例:

REQUIRES "Min number of away talks:" AS $iMinNumAwayTalks
LOOP FROM "Home Talks" NODATERANGE WHERE "Last Given" ISMOREOREQUAL "$Today"  SORTBY "Last Given"
    SHORTDATE_FIELD "Last Given"
    TAB =5>
    TEXT "Week: "
    VARIABLE_FIELD "Last Given" "$iWeekNo#CUSTOMDATE[%W]"
    TEXT "$iWeekNo"
    $iAwayTalkCount = 0
    LOOP FROM "Away Talks" NODATERANGE WHERE "Talk Date" ISMOREOREQUAL "$Today"  SORTBY "Talk Date"
        VARIABLE_FIELD "Talk Date" "$iAwayWeekNo#CUSTOMDATE[%W]"
        IF "$iAwayWeekNo" IS "$iWeekNo"
            $iAwayTalkCount = $iAwayTalkCount + 1
        END_IF
    END_LOOP
    TAB =10>
    TEXT "# Away: "
    TEXT "$iAwayTalkCount"
    TAB =15>
    TEXT "$iMinNumAwayTalks"
    TEXT " Exceed? "
    IF "$iAwayTalkCount" ISMORE "$iMinNumAwayTalks"
        TEXT "Yes"
    END_IF
    IF "$iAwayTalkCount" ISLESSOREQUAL "$iMinNumAwayTalks"
        TEXT "No"
    END_IF
    EOL
END_LOOP

基本上是查看两个表,以计算出指定字段中具有相同周编号(从星期一开始)的记录。

我的问题与我使用的该查询有关:

LOOP FROM "Away Talks" NODATERANGE WHERE "Talk Date" ISMOREOREQUAL "$Today"  SORTBY "Talk Date"

此查询的不利之处在于,它选择了比今天更大的所有记录,然后我必须检查每条记录,以查看“通话日期”字段是否具有相同的星期数。

Results

现在,我的脚本语法也支持原始SQL循环。因此,可以使用原始的Microsoft Access JET SQL查询执行以下操作:

选择所有外出谈话,其中通话日期字段为第X周(其中“周”为每周开始的星期一 )?

我尝试使用以下条件在Access 2016中进行手动测试:

SELECT [Away Talks].[Talk Date]
FROM [Away Talks]
WHERE ((DatePart('ww',[Talk Date],'vbMonday')=45));

但是我有一个错误:

Access Error

我在做什么错了?

2 个答案:

答案 0 :(得分:3)

您在查询中提供的vbMonday是字符串文字('vbMonday'),而不是数字值。

不幸的是,您不能在查询中使用VBA常量vbMonday,因此必须使用其等效的数字:2

要自行查找此数值,您可以在VBE即时窗口中输入?vbMonday,或例如通过在VBE中按F2来打开“对象浏览器”窗口。 您可以在其中搜索vbMonday,然后在窗口底部看到它的数值。

答案 1 :(得分:1)

您在查询设计窗口中的条件提供的是星期号而不是日期,因此您需要创建“星期几”字段以将条件应用到-尝试将代码粘贴到SQL查询编辑器中

SELECT [Away Talks].[Talk Date]
FROM [Away Talks]
WHERE ((DatePart('ww',[Talk Date], 2)=45));

See below