SQL 转换 NTEXT -> VARCHAR -> FLOAT 并有所不同

SQL converting NTEXT -> VARCHAR -> FLOAT and doing a difference

我有两个字段,一个是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。

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

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

您不能在同一个 select 子句中的 select 子句中使用别名。 您必须计算两次或使用 cte/derived table:

;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 ...