匹配时间,连接到日期时间,并存储为 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;