根据结束日期和持续时间查找开始日期-T-SQL

监护人

我在SQL Server中有一个具有以下属性的表。

ProjectID ||  Start_Date  ||   End Date    || Duration(Days)
1                             10-Jan-2013      5
2                             02-FEB 2013      16   
3                             26-Mar-2013      50  
.                                 .             .

我想根据合格日期(星期一至星期五)查找开始日期。例如,“结束日期:1月10日”的开始日期将是1月4日,因为1月5日和1月6日是“星期六”和“星期日”。

我想知道在T-SQL(功能,自定义T-SQL块)中如何做到这一点。任何指导和帮助都将受到高度赞赏。

新石器时代

这应该做到这一点:

WITH tblProjects2 AS (
SELECT ProjectId, DATEADD(DAY, -Duration, EndDate) AS StartDate FROM tblProjects
)
SELECT ProjectId,
  CASE WHEN DATENAME(DW, StartDate) = 'Sunday' THEN DATEADD(day, -2, StartDate)
       WHEN DATENAME(DW, StartDate) = 'Saturday' THEN DATEADD(day, -1, StartDate)
       ELSE StartDate END AS ProperStartDate
  FROM tblProjects2

这种方法非常简单-当您的新约会是在一个周末时,请分别减去1天或2天,具体取决于周六还是周日。

测试用例结构tblProjects

CREATE TABLE [dbo].[tblProjects](
  [ProjectId] [int] NULL,
  [StartDate] [date] NULL,
  [EndDate] [date] NULL,
  [Duration] [int] NULL
)

相同的测试用例数据:

INSERT INTO tblProjects VALUES (1, NULL, '10-Jan-2013', 5);
INSERT INTO tblProjects VALUES (2, NULL, '02-FEB-2013', 16);
INSERT INTO tblProjects VALUES (3, NULL, '26-Mar-2013', 50);

编辑-使用功能的相同功能:

CREATE FUNCTION dbo.getStartDate(@EndDate Date, @Duration int)
RETURNS DATE
AS
BEGIN
   DECLARE @newDate DATE;
   SET @newDate = DATEADD(day, -@Duration, @EndDate);

   RETURN (CASE 
         WHEN DATENAME(DW, @newDate) = 'Sunday' THEN DATEADD(day, -2, @newDate)
         WHEN DATENAME(DW, @newDate) = 'Saturday' THEN DATEADD(day, -1, @newDate)
         ELSE @newDate END)
END;

然后您可以像这样重写上面的查询:

SELECT ProjectId, dbo.getStartDate(EndDate, Duration) AS StartDate
  FROM tblProjects

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何通过自动开始日期和持续时间列来创建更新结束日期 SQL

改进 SQL 查询以查找开始日期和结束日期之间的范围

如何通过将持续时间添加到开始日期 SQL 来更新结束日期

SQL 计算查询开始时间和持续时间以查找结束时间

根据日期和持续时间数据计算时间列 - SQL Server ASP Classic

T-SQL查询仅在开始日期和结束日期之间的发票

SQL Server 根据开始日期和频率查找日期范围

根据SQL中多行的位置创建开始和结束日期

用于查找 ID 的开始和结束日期的 SQL

根据持续时间SQL Server将日期时间间隔按分钟划分

如何根据给定的开始日期和学期持续时间动态设置结束日期?

Oracle SQL查询中的开始/结束日期和时间

如何在SQL中从开始日期,开始时间和完成时间获取结束日期

根据输入的SQL Server和SSRS计算财政年度的开始日期和结束日期

T-SQL 根据与其他记录的日期和时间差异过滤记录

SQL-如何使用开始日期和结束日期查找缺少的活动天数

SQL 按键重复开始和结束日期

合并记录以显示开始日期和结束日期SQL

Sql 如何从 5 周开始日期和结束日期获取

从给定的季度 SQL 计算开始日期和结束日期

使用另一个表查找开始日期时间和结束日期时间之间的重叠时间

计算每年开始日期和结束日期之间的天数持续时间

SQL查询可根据开始和结束时间查找并发会话

sql查询根据开始和结束时间查找不同的条目

SQL Server:根据开始和结束日期将一行分成几行

SQL查询以选择带有系统版本表的值的开始和结束日期时间

SQL Server 2016 - 手动设置期间开始和结束日期时间

开始日期及结束的SQL语句

从开始日期等于开始日期和结束日期之间的sql中检索数据