SQL 查询 select 条日期字段为特定周数的记录

SQL query to select records where date field is certain week number

我没有自己的 "script syntax" 申请。它旨在使用 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"

此查询的缺点是选择所有大于今天的记录,然后我必须检查每条记录以查看 "Talk Date" 字段是否具有相同的周数。

现在,我的脚本语法也支持原始 SQL 循环。那么是否可以使用原始 Microsoft Access JET SQL 查询来:

Select 所有 Away Talks 其中 Talk Date 字段是 X 周 (其中 Week 是从 Monday 开始的一周)?

我尝试在 Access 2016 中使用标准进行手动测试:

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

但是我有一个错误:

我做错了什么?

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

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

要自己找出这个数值,您可以在 VBE 立即数 window 中输入 ?vbMonday,或者打开 'Object Browser' window,例如按 F2 在 VBE 中。 您可以在那里搜索 vbMonday 并在 window.

的底部看到它的数值

您在查询设计中的标准 window 提供的是周数而不是日期,因此您需要创建周无字段来应用标准 - 尝试将您的代码粘贴到 SQL查询编辑器

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