我为我的组织开发了一个在线培训注册应用程序。在此应用程序中,我们有StartDate
,Duration
,Duration Type
列以及其他一些列,而没有EndDate
列。
现在,我面临着根据StartDate
和Duration
查找结束日期的挑战。
请帮助解决此问题。
我的表格数据:
预期输出:
答案 0 :(得分:1)
您将必须在此处使用CASE
表达式来实现此目的。由于一个月的持续时间是可变的,因此您无法将这些期间转换为更通用的值(例如,将期间转换为分钟并将其相加)。从2019年2月1日开始的“ 1个月”只有28天,但是从2020年3月1日开始是31天。
结果如下:
SELECT YT.StartDatY,
CASE DurationType WHEN 'Minutes' THEN DATEADD(MINUTE,YT.Duration,UT.StartDate)
WHEN 'Hours' THEN DATEADD(HOUR,YT.Duration,UT.StartDate)
WHEN 'Days' THEN DATEADD(DAY,YT.Duration,UT.StartDate)
WHEN 'Months' THEN DATEADD(MONTH,YT.Duration,UT.StartDate)
WHEN 'Years' THEN DATEADD(Year,YT.Duration,UT.StartDate)
END AS EndDate,
YT.Duration,
YT.DurationType
FROM dbo.YourTable YT;
答案 1 :(得分:0)
您可以使用函数DATEADD查找结束日期。
PlotView
您可以添加各种类型的持续时间(年,月,日,小时,分钟,秒等)
例如,您可以添加一个月的日期:
double xMin = -500;
double xMax = 800;
double xRange = xMax - xMin;
double yRange = xRange / ActualWidth * ActualHeight;
double yMin = 58;
double yMax = yMin + yRange;
_model.Axes[0].Minimum = xMin;
_model.Axes[0].AbsoluteMinimum = xMin;
_model.Axes[0].Maximum = xMax;
_model.Axes[0].AbsoluteMaximum = xMax;
// Analogically, define limits of Y axe
答案 2 :(得分:0)
您是否可以根据查询的错误示例进行检查?
DECLARE @table TABLE
(
StartDate DATETIME,
EenDate DATETIME NULL,
Duration INT,
Type NVARCHAR(20)
)
INSERT INTO @table VALUES ('2020-08-18',NULL,15,'Days'),
('2020-08-18',NULL,10,'Month'),
('2020-08-18',NULL,10,'Hours'),
('2020-08-18',NULL,2,'Year')
SELECT * FROM @table
SELECT StartDate,CASE WHEN [Type] = 'Days' THEN CONVERT(DATE,DATEADD(DAY,Duration,StartDate))
WHEN [Type] = 'Month' THEN CONVERT(DATE,DATEADD(MONTH,Duration,StartDate))
WHEN [Type] = 'Hours' THEN CONVERT(DATE,DATEADD(HOUR,Duration,StartDate))
WHEN [Type] = 'Year' THEN CONVERT(DATE,DATEADD(YEAR,Duration,StartDate))
END EenDate,
Duration,Type FROM @table
输出
答案 3 :(得分:0)
谢谢大家!
下面的查询返回了确切的预期输出。
SELECT StartDate,CASE WHEN [Type] = 'Days' THEN CONVERT(DATE,DATEADD(DAY,Duration,StartDate))
WHEN [Type] = 'Months' THEN CONVERT(DATE,DATEADD(MONTH,Duration,StartDate))
WHEN [Type] = 'Hours' THEN CONVERT(DATE,DATEADD(HOUR, Duration, cast(cast(StartDate as date) as datetime)))
WHEN [Type] = 'Year' THEN CONVERT(DATE,DATEADD(YEAR,Duration,StartDate))
END EndDate,
Duration,Type FROM Testing1