2017-03-06 108 views
0

我有兩個字段,一個是int,一個是ntext。我需要從int字段中減去ntext字段。我正在考慮Hours_Current這是int字段,並將其潛伏了60.我已經調試了一段時間,並且可以確認第一個CAST正在工作並按照預期除以60。然後我將nText字段轉換爲浮點數並從小時數中減去時間。數據庫中的時間字段有一些條目是數字(我需要)和一些條目是文本(不需要)。SQL轉換NTEXT - > VARCHAR - > FLOAT並做出區別

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鏈接,並嘗試過,但似乎沒有工作。我看了一下,看起來很在線,我發現有幾篇文章想談談ntext如何折舊。我不幸無法更改數據庫架構。有任何想法嗎?

我也試着用nvarchar代替varchar。

+0

你怎麼樣給我們一些樣本數據與 – GuidoG

回答

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 

OR

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 ... 
+0

工作謝謝你的快速和良好的響應。我使用第二種解決方案,它的功能就像一個魅力。我不確定你做了什麼與我做的不同,因爲我覺得我已經嘗試過,但是我會弄清楚什麼地方出了問題。非常感謝! –