【问题标题】:Query/return records with dates between Sunday and Saturday?查询/返回日期在星期日和星期六之间的记录?
【发布时间】:2012-03-18 09:27:56
【问题描述】:

我搜索了这个网站和其他网站,但找不到这个确切的场景。我需要向我的页面添加一个网格视图,其中 sqldatasource 基于一个查询,该查询返回当前一周的星期日和星期六之间的记录。 (每条记录都有一个日期字段)这些记录用于工资核算,工资核算周从星期日到星期六。我需要找到属于当前工资周的所有记录。谁能指出我正确的开始方向?我正在用 VB 编写代码。

【问题讨论】:

    标签: asp.net sql vb.net


    【解决方案1】:

    这是一个 SQL 问题,因此您应该使用您的 dbms 相应地标记它。

    假设您使用的是 SQL-Server,DATEPART 可用于获取工作日作为 datetime 字段的 intDATENAME 可用于获取工作日的名称。

    例如(假设星期日到星期六实际上是指星期一到星期五):

    SELECT t.*
    FROM YourTable t
    WHERE DATEPART(weekday, YourDateField) BETWEEN 2 AND 6
    

    注意depends on regional settings是一周的第一天。

    编辑:如果您想选择本周的记录。

    SELECT t.*
    FROM YourTable t
    WHERE YourDateField >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()) / 7 * 7, 0)
    AND YourDateField < DATEADD(DAY, DATEDIFF(DAY, -1, GETDATE()), 0)
    

    http://msdn.microsoft.com/en-us/library/ms186819.aspx

    【讨论】:

    • 好的,所以我实施了您的第二个建议并且它正在工作。但是,它过滤的是周一至周日而不是周日至周六。
    • 好的,所以我修改了 SQL,现在它似乎在周日和周六之间工作。 (有关代码,请参见下一条评论)唯一的问题是它不会显示当日之后的本周的任何记录。例如,给星期天 03/18 到星期六 03/24,如果我在 03/20 运行查询,我看不到 03/20 之后的任何记录,即使它们存在。 (即:03/21、03/22、03/23 和 03/24)有没有办法解决这个问题并显示该星期天/星期六周内的任何记录?
    • SELECT t.* FROM YourTable t WHERE YourDateField >= DATEADD(DAY, DATEDIFF(DAY, -1, GETDATE()) / 7 * 7, -1) AND YourDateField
    • 找到了似乎是实现所需结果的简化方法。 datediff(wk,[ColumnName],getdate())=0 这到目前为止工作得很好。感谢提供建议的人!
    【解决方案2】:

    我想您正在寻找一种方法来获取员工在两个日期之间的工作时间
    (从周日到周六)。您需要今天之前的星期日的确切日期。 这可以通过这个函数来完成

    Public  Function FirstWeekDay(d as DateTime)  As DateTime
        While(d.DayOfWeek <> DayOfWeek.Sunday)
            d.AddDays(-1)
        End While
        return d
    End Function
    

    返回的日期是您的 startDate,而 endDate 取决于您要在哪里停止搜索。
    根据你的问题,这个日期是下周六。只需将 6 天添加到 startDate。 现在只需将正确的参数传递给您的查询/存储过程:

    SELECT w.* FROM workTime w WHERE w.empID = @empID AND w.workDate BETWEEN @startDate AND @endDate 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      • 2021-02-05
      相关资源
      最近更新 更多