【发布时间】:2015-07-26 13:31:19
【问题描述】:
我今天遇到了一个奇怪的问题。请帮助找出FirstTimeReported 列。 http://sqlfiddle.com/#!3/2e9845/1
表格列:
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;
【问题讨论】:
-
我不允许使用更新和插入功能,所以我只需要用一个选择语句来弄清楚。我可以得到 SupportID 1001 的 FirstTimeReported,因为我可以从 DateEntered 中删除时间并从 ReportedTime 中连接时间。对于 SupportID 2001,问题是由于午夜而出现的。
标签: sql-server sql-server-2012-express