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));
我没有自己的 "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));