使用SQL语句忽略Microsoft Access中的周末

时间:2013-02-05 17:28:07

标签: asp.net sql ms-access

我找到了几个关于如何使用SQL语句来忽略周末的主题。我不需要忽视假期,只是周末。但是,这些似乎都不适合我。我在asp.net中使用Access数据库并尝试使用此功能:

SELECT *
FROM your_table
WHERE ((DATEPART(dw, DateCalled) + @@DATEFIRST) % 7) NOT IN (0, 1)

但AccessDataSource似乎不喜欢这种语法。我的实际查询需要搜索3个工作日的记录,这意味着如果星期五有记录,则在下周三之前不会显示。

2 个答案:

答案 0 :(得分:3)

您可以使用weekday

SELECT *
FROM your_table
WHERE weekday(date) NOT IN (1, 7)

答案 1 :(得分:3)

您有一个日期/时间参数 DATEFIRST ,并且您希望选择 DateCalled 值不超过 DATEFIRST 之前3个工作日的行 EM>。我认为这意味着这些是您想要的每个参数值的最新日期......

DATEFIRST         3 workdays previous
---------------   -------------------
Mon, 01/28/2013   Wed, 01/23/2013
Tue, 01/29/2013   Thu, 01/24/2013
Wed, 01/30/2013   Fri, 01/25/2013
Thu, 01/31/2013   Mon, 01/28/2013
Fri, 02/01/2013   Tue, 01/29/2013
Sat, 02/02/2013   Tue, 01/29/2013
Sun, 02/03/2013   Tue, 01/29/2013

我使用Access 2007测试了以下查询。它返回与上述DATEFIRST模式匹配的结果。

PARAMETERS DATEFIRST DateTime;
SELECT *
FROM your_table AS y
WHERE y.DateCalled < DateAdd(
        'd',
        Switch(
            Weekday([DATEFIRST])=1,-4,
            Weekday([DATEFIRST])=2,-4,
            Weekday([DATEFIRST])=3,-4,
            Weekday([DATEFIRST])=4,-4,
            Weekday([DATEFIRST])=5,-2,
            Weekday([DATEFIRST])=6,-2,
            Weekday([DATEFIRST])=7,-3
            ),
        [DATEFIRST]
        );

根据您的评论,我怀疑我误解了您的意图。看来你不想要参数查询。相反,您希望DateCalled过滤器在查询运行日期之前3天。如果是,请放弃PARAMETERS条款,并将Date()的访问权限替换为[DATEFIRST]

SELECT *
FROM your_table AS y
WHERE y.DateCalled < DateAdd(
        'd',
        Switch(
            Weekday(Date())=1,-4,
            Weekday(Date())=2,-4,
            Weekday(Date())=3,-4,
            Weekday(Date())=4,-4,
            Weekday(Date())=5,-2,
            Weekday(Date())=6,-2,
            Weekday(Date())=7,-3
            ),
        Date()
        );