2015-10-12 74 views
-3

我試圖運行一個case語句,並得到主題行錯誤消息。將數據類型varchar轉換爲數字時出錯

SELECT 
    IndexValue = CONVERT(VARCHAR, 
        CASE WHEN _608 in ('value1', 'value2') 
           THEN _688/100 
           ELSE '' 
        END) 
FROM DB1 
  • 場_608 datetype = VARCHAR(26)
  • 場_688數據類型=十進制(23,10)

我也看了其他問題/答案,不能找到任何答案這個簡單的問題。

+0

那麼有什麼值得不到的呢? –

+0

這只是痛苦的。爲什麼要在varchar列中存儲數字?你在這裏混合了數據類型,這是導致你看不到的性能問題。 –

+1

真正的問題是因爲您有一個具有混合數據類型的案例表達式。當這個值符合你的標準時,你正在做數學運算,否則你試圖使用一個空字符串,它不能被轉換爲數字。 –

回答

2

查詢有太多錯誤,很難查明它們。

您將轉換爲varchar,但不指定長度。默認值因上下文而異,因此您應該始終指定長度。您在單個列內混合數據類型。你的列名很簡單。你正在用硬編碼的整數進行除法,除非_688是一個數字,否則你將得到整數除法,這可能不是你想要的。

嘗試沿着這些線。

SELECT IndexValue = isnull(CONVERT(VARCHAR(10), CASE WHEN [_608] in ('value1', 'value2') THEN [_688]/100.0 END), '') 
FROM DB1 
+0

這正是你想要的查詢你提供的,但沒有另一列提供一個上下文到你的IndexValue它沒有多大意義。 –

+0

肖恩蘭格,非常感謝您的反饋!我們已經從MySQL轉換到SQL Server,儘管它們是相似的,但一些功能有點具有挑戰性。 – benjo

相關問題