【发布时间】:2021-09-19 17:24:14
【问题描述】:
出于某种原因,我正在为我在这里尝试实现的逻辑而苦苦挣扎,并且想知道是否会有任何帮助。
请在下面找到数据的代码-
/****** Object: Table [dbo].[temp_TEST] Script Date: 09/07/2021 12:01:26 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[temp_TEST](
[TransactionId] [int] NULL,
[DateFrom] [datetime] NULL,
[DateTo] [datetime] NULL,
[totalvalue] [decimal](18, 2) NULL,
[DailyAmount] [decimal](18, 2) NULL,
[EffectiveFromDate] [datetime] NULL,
[EffectiveToDate] [datetime] NULL
) ON [PRIMARY]
GO
INSERT [dbo].[temp_TEST] ([TransactionId], [DateFrom], [DateTo], [totalvalue], [DailyAmount], [EffectiveFromDate], [EffectiveToDate]) VALUES (809228, CAST(N'2021-06-14T00:00:00.000' AS DateTime), CAST(N'2021-06-27T00:00:00.000' AS DateTime), CAST(159.16 AS Decimal(18, 2)), CAST(11.37 AS Decimal(18, 2)), CAST(N'1946-01-01T00:00:00.000' AS DateTime), CAST(N'2021-06-22T00:00:00.000' AS DateTime))
INSERT [dbo].[temp_TEST] ([TransactionId], [DateFrom], [DateTo], [totalvalue], [DailyAmount], [EffectiveFromDate], [EffectiveToDate]) VALUES (809228, CAST(N'2021-06-14T00:00:00.000' AS DateTime), CAST(N'2021-06-27T00:00:00.000' AS DateTime), CAST(159.16 AS Decimal(18, 2)), CAST(11.37 AS Decimal(18, 2)), CAST(N'2021-06-23T00:00:00.000' AS DateTime), CAST(N'2021-07-09T11:59:40.833' AS DateTime))
我要做的是计算一组日期之间过去的天数。
所以这显示的是 DateFrom 和 DateTo 字段。这些是我要在 EffectiveFromDate 和 EffectiveToDate 之间计算的关键日期。
所以我期望的是 DateFrom 和 DateTo 之间过去的天数......在 EffectiveFromDate 和 EffectiveToDate 期间,所以每行过去了多少天,但仅在 DateFrom 和 DateTo 日期期间。
第一行 - 自 1946 年 1 月 1 日起生效,但于 21 年 6 月 22 日结束 - 即 DateFrom 和 DateTo 日期之间的 9 天。那是 14/06 到 22/06。
第二行 - 自 2006 年 2 月 23 日起生效。它仍然有效,因此有效日期是今天的日期......但自 23/06 以来一直是该值,因此 DateFrom 和 DateTo 之间将是 5 天。包括 23/06。
希望我已经正确解释了自己。
【问题讨论】:
-
您的预期结果应该是什么样子?另外请将示例数据以文本而不是图像的形式发布。
-
第 2 行怎么可能是 6 天?鉴于您的规则:“仅在 DateFrom 和 DateTo 日期期间”,即在生效日期内,差异应该是 4. 6/23 到 6/27。我假设您使用了最新的 FromDate 和最早的 ToDate。
-
我会尽快在这里发布数据。抱歉,我很快会在此处编辑请求。基本上,第 2 行需要 5 天,第 1 行需要 9 天。我需要根据 EffectiveFrom 和 to 日期知道 - 但仅限于 DateFrom 和 DateTo 日期之间。所以第 2 行 - 在 23/06 生效 - 所以将该日期包括到 27/06 是 5 天。第 1 行 - 有效期至 22/06。 .即从 14/06 开始的九 (9) 天(包括第 1 行生效到 22/06 的那一天)
标签: tsql