【发布时间】:2012-03-18 09:27:56
【问题描述】:
我搜索了这个网站和其他网站,但找不到这个确切的场景。我需要向我的页面添加一个网格视图,其中 sqldatasource 基于一个查询,该查询返回当前一周的星期日和星期六之间的记录。 (每条记录都有一个日期字段)这些记录用于工资核算,工资核算周从星期日到星期六。我需要找到属于当前工资周的所有记录。谁能指出我正确的开始方向?我正在用 VB 编写代码。
【问题讨论】:
我搜索了这个网站和其他网站,但找不到这个确切的场景。我需要向我的页面添加一个网格视图,其中 sqldatasource 基于一个查询,该查询返回当前一周的星期日和星期六之间的记录。 (每条记录都有一个日期字段)这些记录用于工资核算,工资核算周从星期日到星期六。我需要找到属于当前工资周的所有记录。谁能指出我正确的开始方向?我正在用 VB 编写代码。
【问题讨论】:
这是一个 SQL 问题,因此您应该使用您的 dbms 相应地标记它。
假设您使用的是 SQL-Server,DATEPART 可用于获取工作日作为 datetime 字段的 int,DATENAME 可用于获取工作日的名称。
例如(假设星期日到星期六实际上是指星期一到星期五):
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)
【讨论】:
我想您正在寻找一种方法来获取员工在两个日期之间的工作时间
(从周日到周六)。您需要今天之前的星期日的确切日期。
这可以通过这个函数来完成
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
【讨论】: