【发布时间】:2017-05-26 10:29:28
【问题描述】:
我正在编写一个复杂的查询,但在从 case expression 计算时遇到了一些问题(谢谢)。基本上,多亏了这个网站上的一些巨大帮助,我设法通过使用有序表解决了另一个问题,但现在我以前使用的 select 语句之一不再适用于 OT。
我收到一个错误:
从字符串转换日期和/或时间时转换失败
问题的核心是我想通过从结束日期减去开始日期来计算持续时间。我之前使用的代码是
select
cast((CASE
WHEN ap.startLIKE '%[^0-9]%'
THEN CAST(ap.end as datetime)
ELSE NULL
END)
-
(CASE
WHEN ap.start LIKE '%[^0-9]%'
THEN CAST(ap.start as datetime)
ELSE NULL
END) as time) as Duration,
ap.start, ap.end, ap.description
from
Table as AP
group by
ap.start, ap.end, ap.description
但是当我更改为从有序表中提取此信息时:
Select
ot.starttime as "Start Time",
ot.endtime as "End Time",
ot.description "Description",
ot.entrynumber as "ID Number",
cast((CASE
WHEN ot.endtime LIKE '%[^0-9]%'
THEN CAST(ot.endtime as datetime)
ELSE NULL
END)
-
(CASE
WHEN ot.starttime LIKE '%[^0-9]%'
THEN CAST(ot.starttime as datetime)
ELSE NULL
END) as time) as duration
From
OrderedTable as OT
group by
ot.starttime, ot.endtime, ot.description, ot.entrynumber
order by
ot.endtime
我得到了错误。以前应用 group by 子句已删除错误,但未从有序表中删除。
由于我一直在尝试不断消除转换为日期的问题,我不确定是什么导致了问题,我将不胜感激。
最初的问题是服务器上的日期字段是 nvarchar 格式而不是日期时间,我一直在尝试解决这个问题。
【问题讨论】:
-
大小写表达式,而不是大小写陈述。
-
很明显,
OrderedTable有不同日期格式的行无法转换。 -
但是源数据是一样的,ap.starttime = ot.starttime.
标签: sql sql-server-2008 date casting