0

我有两个字段,一个是 int,一个是 ntext。我需要从 int 字段中减去 ntext 字段。我将 Hours_Current 这是 int 字段除以 60。我已经调试了一段时间,可以确认第一个 CAST 正在工作并按预期除以 60。然后我将 nText 字段转换为浮动并从小时中减去时间。数据库中的时间字段有一些条目是数字(我需要),一些条目是文本(不需要)。

SELECT
CAST(SUM(Hours_Current) AS FLOAT)/60 AS 'Current Hours'
CONVERT(FLOAT, CONVERT(VARCHAR(MAX), ObjField)) AS 'Time',
'Time' - 'Current Hours' AS DIFF

我已经尝试了无数种不同的方法来实现这一点。大多数时候我得到“操作数数据类型 varchar 对减法运算符无效”。我的最终目标是在报告中使用它。我还取出了 DIFF 并使用 SSRS 表达式尝试减去这两个字段,我在报告中得到 #Error。

我已经看过这个链接并尝试过,但它似乎不起作用。我在网上看了又看,我发现有几篇文章想谈谈ntext是如何贬值的。不幸的是,我无法更改数据库架构。有任何想法吗?

我也尝试过使用 nvarchar 而不是 varchar。

4

1 回答 1

1

您不能在同一个 select 子句中使用 select 子句中的别名。您必须进行两次计算或使用 cte/派生表:

;WITH CTE AS
(
SELECT
CAST(SUM(Hours_Current) AS FLOAT)/60 AS Current_Hours
CONVERT(FLOAT, CONVERT(VARCHAR(MAX), ObjField)) AS [Time]
FROM ...
WHERE ...
)

SELECT Current_Hours As [Current Hours], 
       [Time], 
       [Time] - Current_Hours As [Diff]
FROM CTE

或者

SELECT
CAST(SUM(Hours_Current) AS FLOAT)/60 AS [Current Hours]
CONVERT(FLOAT, CONVERT(VARCHAR(MAX), ObjField)) AS [Time],
     (CAST(SUM(Hours_Current) AS FLOAT)/60) - 
     (CONVERT(FLOAT, CONVERT(VARCHAR(MAX), ObjField))) As [Diff]
FROM ...
于 2017-03-06T16:21:48.630 回答