sql - 为什么记录没有得到进入日期的纠察队?
问题描述
我很久以前就写过这个查询,它可以工作,但现在不行了。
CREATE PROCEDURE [dbo].[WeeklyReport]
AS
BEGIN
CREATE TABLE #temp
(
Area VARCHAR(20),
NoOfInspec INT
)
INSERT INTO #temp
SELECT DISTINCT
Area, COUNT(*) AS NoOfInsp
FROM
EngineeringData E, PIRTaskList T
WHERE
E.EnggDataID = t.EnggDataID
AND T.NextInspDate BETWEEN (DATEADD(DAY, 1 - DATEPART(WEEKDAY, GETDATE()), GETDATE()))
AND (DATEADD(DAY, 7 - DATEPART(WEEKDAY, GETDATE()), GETDATE()))
GROUP BY
Area
SELECT
t.Area, t.NoOfInspec AS Planned, SecTable.NoOfInsp AS Executed
FROM
#temp t
INNER JOIN
(SELECT DISTINCT
Area, COUNT(*) AS NoOfInsp
FROM
tblScheduleHistory
WHERE
EntryDate BETWEEN (DATEADD(DAY, 1 - DATEPART(WEEKDAY, GETDATE()), GETDATE()))
AND (DATEADD(DAY, 7 - DATEPART(WEEKDAY, GETDATE()), GETDATE()))
GROUP BY
Area) SecTable ON SecTable.Area = t.Area
ORDER BY
t.Area
END
几条记录的entrydate
日期是
2019-10-06
2019-09-06
2019-11-06
如果有 1 个日期,则要求选择整周的记录。
解决方案
DATEPART(WEEKDAY, GETDATE())
取决于SET DATEFIRST
选项,该选项也使用SET LANGUAGE
. 也可以在服务器级别配置默认语言,使用sp_configure
.
例如,尝试以下操作以查看不同的结果:
DECLARE @CurrentDate DATE='2019-06-16'
SET LANGUAGE ENGLISH
SELECT DATEPART(WEEKDAY, @CurrentDate),
DATEADD(DAY, 1 - DATEPART(WEEKDAY, @CurrentDate), @CurrentDate),
DATEADD(DAY, 7 - DATEPART(WEEKDAY, @CurrentDate), @CurrentDate)
-- returns 1, 2019-06-16, 2019-06-22
SET LANGUAGE BRITISH
SELECT DATEPART(WEEKDAY, @CurrentDate),
DATEADD(DAY, 1 - DATEPART(WEEKDAY, @CurrentDate), @CurrentDate),
DATEADD(DAY, 7 - DATEPART(WEEKDAY, @CurrentDate), @CurrentDate)
-- returns 7, 2019-06-10, 2019-06-16
为了使代码以相同的方式工作,无论SET DATEFIRST
选项如何,您都可以添加@@DATEFIRST
以下方式:
DECLARE @CurrentDate DATE='2019-06-16'
SET LANGUAGE ENGLISH
SELECT (@@DATEFIRST-1 + DATEPART(WEEKDAY, @CurrentDate))%7+1,
DATEADD(DAY, 1 - ((@@DATEFIRST-1 + DATEPART(WEEKDAY, @CurrentDate))%7+1), @CurrentDate),
DATEADD(DAY, 7 - ((@@DATEFIRST-1 + DATEPART(WEEKDAY, @CurrentDate))%7+1), @CurrentDate)
-- returns 1, 2019-06-16, 2019-06-22
SET LANGUAGE BRITISH
SELECT (@@DATEFIRST-1 + DATEPART(WEEKDAY, @CurrentDate))%7+1,
DATEADD(DAY, 1 - ((@@DATEFIRST-1 + DATEPART(WEEKDAY, @CurrentDate))%7+1), @CurrentDate),
DATEADD(DAY, 7 - ((@@DATEFIRST-1 + DATEPART(WEEKDAY, @CurrentDate))%7+1), @CurrentDate)
-- returns 1, 2019-06-16, 2019-06-22
推荐阅读
- ios - 如何在 Swift 5 中将 JSON 数据存储到模型类数组中
- azure-devops - 发送有关 Azure DevOps 的测试自动化报告
- xml - roslaunch XML 语法无效:格式不正确
- android - 如何解决 Android Studio 警告错误?
- vb.net - 通过.net客户端调用WCF方法需要太长时间
- php - 为什么这些变量的总和返回负零?
- javascript - 在打字稿中, if(item.some((item) => !item.available) 是什么意思?
- angular - Power BI 嵌入 Angular UI 应用程序
- excel - 直到最后一行的单元格引用
- javascript - 如何在反应中将日期/时间转换为人类可读的形式?