2010-09-29 109 views
0

大家下午轉換NVARCHAR到INTEGER,問題在SQL Server 2005 Express的

我有一個計算轉換成整數的一些問題!本質上我有計算;

CAST(ROUND(SQRT(SQUARE(69.1*(CAST(tblPostCode.PCLat AS DECIMAL(30,15)) - "& 53.078282 &")) + SQUARE(69.1 * (CAST(tblPostCode.PCLng AS DECIMAL(30,15)) - "& -2.271495 &") * COS(CAST(tblPostCode.PCLat AS DECIMAL(30,15))/57.3))),0) AS INTEGER) 

(它計算經度,緯度之間的距離從POST代碼)

現在,我可以在SELECT語句中使用這個值,輸出的ISNUMERIC()返回true!然而,當我嘗試在WHERE語句WHERE .... <= 150中限制此值時,我收到了返回的「錯誤,將NVARCHAR轉換爲INTEGER」消息。

任何人都可以幫忙嗎?我試過CONVERT和CAST,如果我添加有限的WHERE ISNUMERIC(...) = 1,我沒有輸出值!

所有幫助表示讚賞

最親切的問候 皮特W¯¯

+0

什麼代碼...? – EFraim 2010-09-29 11:49:41

+4

' - 「&-2.271495&」'東西是完全無效的。你可以發佈運行的代碼嗎?編輯:除非你確實有一個名爲'&-2.271495&'的列? – 2010-09-29 11:51:23

+0

你能提供問題的表結構和樣本數據嗎? – 2010-09-29 11:57:01

回答

0

我常數值(5,6),以測試你的查詢替換您的表引用(tblPostCode.PCLng,tblPostCode.PCLat)。正如馬丁史密斯在他的評論中已經提到的那樣,引號中的表達是完全無效的。這可能是以前的查詢的遺留物嗎? SQL所做的是試圖將表達式轉換爲由於引號中的「&」而失敗的整數。如果刪除標記,並保持恆定的值,它的工作對我來說:

SELECT CAST(ROUND(SQRT(SQUARE(69.1 
           * (CAST(5 AS DECIMAL(30, 15)) 
            - 53.078282)) + SQUARE(69.1 
                   * (CAST(6 AS DECIMAL(30, 
                   15)) 
                   - 2.271495) 
                   * COS(CAST(5 AS DECIMAL(30, 
                   15))/57.3))), 
        0) AS INTEGER) 

結果是:

3332 
+1

??給你的異常「&-2.271495&」的理由會更有幫助。 – JanW 2010-09-29 15:23:39

+0

是的你是正確的,「&&」是我複製和粘貼我的ASP代碼。 奇怪的是,查詢將運行,輸出兩組緯度/多頭之間的距離,但是當我嘗試使用的計算,以便找到成員誰住<200英里遠,查詢輸出所有誰住不到成員200英里之外,THEN會轉移到下一個沒有出現錯誤的成員身上! 「SELECT .. [the calculation]」=運行良好 「SELECT .. [計算]」... WHERE [計算] 2010-09-29 16:16:01

+0

非常感謝,現在發佈已排序。數據庫模式中的數據類型不一致 – 2010-09-29 19:26:53