匹配时间,连接到日期时间,并存储为 SQL Server 2012 中的日期时间列
Match time, Concatenate to datetime, and store as datetime column in SQL Server 2012
我 运行 今天遇到了一个奇怪的问题。请帮助找出 FirstTimeReported
列。 http://sqlfiddle.com/#!3/2e9845/1
Table 列:
SupportID int primary key,
DateEntered datetime,
ReportedTime varchar(4)
输入数据
SupportID DateEntered ReportedTime
1001 2015-04-13 09:15:00 0900
2001 2015-04-14 00:10:00 2355
预期结果:
SupportID FirstTimeReported
1001 2015-04-13 09:00:00
2001 2015-04-13 23:55:00
更新:这是我刚刚根据@Dan Guzman 的代码修改的工作解决方案 2:
SELECT
SupportID
, CASE
WHEN DATEADD(minute, CAST(RIGHT(ReportedTime, 2) AS int), DATEADD(hour, CAST(LEFT(ReportedTime, 2) AS int), CAST(CAST(DateEntered AS date) AS datetime))) <= DateEntered THEN DATEADD(minute, CAST(RIGHT(ReportedTime, 2) AS int), DATEADD(hour, CAST(LEFT(ReportedTime, 2) AS int), CAST(CAST(DateEntered AS date) AS datetime)))
ELSE DATEADD(day, -1, DATEADD(minute, CAST(RIGHT(ReportedTime, 2) AS int), DATEADD(hour, CAST(LEFT(ReportedTime, 2) AS int), CAST(CAST(DateEntered AS date) AS datetime))))
END AS FirstTimeReported
FROM SupportContacts;
我假设计算出的 FirstTimeReported 应该是过去的,源自 DateEntered。这当然假设该行是在 ReportTime 的 24 小时内输入的。
WITH
SupportContactsFirstTimeReported AS (
SELECT
SupportID
, DateEntered
, DATEADD(minute, CAST(RIGHT(ReportedTime, 2) AS int), DATEADD(hour, CAST(LEFT(ReportedTime, 2) AS int), CAST(CAST(DateEntered AS date) AS datetime))) AS CalculatedReportedTime
FROM supportContacts
)
SELECT
SupportID
, CASE
WHEN CalculatedReportedTime <= DateEntered THEN CalculatedReportedTime
ELSE DATEADD(day, -1, CalculatedReportedTime)
END AS FirstTimeReported
FROM SupportContactsFirstTimeReported;
我 运行 今天遇到了一个奇怪的问题。请帮助找出 FirstTimeReported
列。 http://sqlfiddle.com/#!3/2e9845/1
Table 列:
SupportID int primary key,
DateEntered datetime,
ReportedTime varchar(4)
输入数据
SupportID DateEntered ReportedTime
1001 2015-04-13 09:15:00 0900
2001 2015-04-14 00:10:00 2355
预期结果:
SupportID FirstTimeReported
1001 2015-04-13 09:00:00
2001 2015-04-13 23:55:00
更新:这是我刚刚根据@Dan Guzman 的代码修改的工作解决方案 2:
SELECT
SupportID
, CASE
WHEN DATEADD(minute, CAST(RIGHT(ReportedTime, 2) AS int), DATEADD(hour, CAST(LEFT(ReportedTime, 2) AS int), CAST(CAST(DateEntered AS date) AS datetime))) <= DateEntered THEN DATEADD(minute, CAST(RIGHT(ReportedTime, 2) AS int), DATEADD(hour, CAST(LEFT(ReportedTime, 2) AS int), CAST(CAST(DateEntered AS date) AS datetime)))
ELSE DATEADD(day, -1, DATEADD(minute, CAST(RIGHT(ReportedTime, 2) AS int), DATEADD(hour, CAST(LEFT(ReportedTime, 2) AS int), CAST(CAST(DateEntered AS date) AS datetime))))
END AS FirstTimeReported
FROM SupportContacts;
我假设计算出的 FirstTimeReported 应该是过去的,源自 DateEntered。这当然假设该行是在 ReportTime 的 24 小时内输入的。
WITH
SupportContactsFirstTimeReported AS (
SELECT
SupportID
, DateEntered
, DATEADD(minute, CAST(RIGHT(ReportedTime, 2) AS int), DATEADD(hour, CAST(LEFT(ReportedTime, 2) AS int), CAST(CAST(DateEntered AS date) AS datetime))) AS CalculatedReportedTime
FROM supportContacts
)
SELECT
SupportID
, CASE
WHEN CalculatedReportedTime <= DateEntered THEN CalculatedReportedTime
ELSE DATEADD(day, -1, CalculatedReportedTime)
END AS FirstTimeReported
FROM SupportContactsFirstTimeReported;