datetime—两个日期和两个时间之间的sql查询,仅适用于工作日

byqmnocz  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(515)

我正在尝试编写一个查询,它将为我提供在两个特定时间内两个特定日期之间完成的程序数,但仅限于工作日。我有日期和时间的脚本工作,但我不知道如何得到它,所以它只包括工作日。我只想要星期一到星期五的结果,不包括星期六和星期天的结果。
我的问题:

  1. SELECT MONTH(r.LastModifiedDate) AS MONTHpreCOVID, PlacerFld2 AS MODALITY, COUNT(*) AS CountOfReportsDayTimePreCOVID
  2. FROM [order] o
  3. LEFT JOIN report r
  4. ON o.reportID = r.reportID
  5. WHERE r.LastModifiedDate >= '2019-07-01' AND r.lastmodifieddate <= '2020-06-01'
  6. AND CAST(r.lastmodifieddate as TIME) >= '08:00:00' AND CAST(r.lastmodifieddate as TIME) <='16:59:59'
  7. AND reportstatusID = '7'
  8. AND r.creatorAcctID = '139'
  9. GROUP BY MONTH(r.LastModifiedDate), PlacerFld2
  10. ORDER BY MONTH(r.LastModifiedDate) ASC

我尝试在('0','1','2','3','4')中添加类似weekday(r.lastmodifieddate)的内容,但这不起作用。

aelbi1ox

aelbi1ox1#

使用此选项:

  1. AND (((DATEPART(DW, r.lastmodifieddate) - 1 ) + @@DATEFIRST ) % 7) in ('1','2','3','4','5')
  2. ``` `(((DATEPART(DW, r.lastmodifieddate) - 1 ) + @@DATEFIRST ) % 7)` 将始终返回一个介于0和6之间的数字,其中每个数字都是:

0 -> Sunday
1 -> Monday
2 -> Tuesday
3 -> Wednesday
4 -> Thursday
5 -> Friday
6 -> Saturday

  1. 你可以用这样一个简单的查询来检查它

SELECT (((DATEPART(DW, @DATE_VAR) - 1 ) + @@DATEFIRST ) % 7)

  1. 替换 `@DATE_VAR` 有效日期。i `1900-01-01`
展开查看全部
pftdvrlh

pftdvrlh2#

您可以将一周中的某一天确定为datepart(weekday,dt)。
让你看看

  1. Select Dt, DATEPART(WEEKDAY, dt) as WeekDayNumber, DATEName(WEEKDAY, dt) as WeekDayName
  2. from
  3. (
  4. Select Getdate() as Dt Union
  5. Select Getdate() + 1 Union
  6. Select Getdate() + 2 Union
  7. Select Getdate() + 3 Union
  8. Select Getdate() + 4 Union
  9. Select Getdate() + 5 Union
  10. Select Getdate() + 6 Union
  11. Select Getdate() + 7
  12. ) Q
  13. Where DATEPART(WEEKDAY, dt) Not In ( 1,7)

所以对你来说,应该是

  1. ....
  2. WHERE r.LastModifiedDate >= '2019-07-01' AND r.lastmodifieddate <= '2020-06-01'
  3. AND CAST(r.lastmodifieddate as TIME) >= '08:00:00' AND CAST(r.lastmodifieddate as TIME) <='16:59:59'
  4. AND reportstatusID = '7'
  5. AND r.creatorAcctID = '139'
  6. AND DATEPART(WEEKDAY, r.LastModifiedDate) Not In ( 1,7)
展开查看全部

相关问题