2011-03-30 117 views
1

我知道如何將nvarchar轉換爲十進制(18,4)Cast方法。我的表格行數爲80000.我的查詢在下面運行完美...如何將nvarchar轉換爲小數?


SELECT top 80000 id, Cast(MH as decimal(18,4)) as MH 
FROM TaskRelations WHERE MH is not null 

但是;

但以下選擇查詢不工作!如果寫下面:


SELECT id, Cast(MH as decimal(18,4)) as MH 
FROM TaskRelations WHERE MH is not null 

錯誤:將數據類型nvarchar轉換爲數字時出錯。

+1

這是因爲不可能將其中一個MH記錄投射到前80000行中。什麼是MH數據類型? – dcarneiro 2011-03-30 14:37:57

回答

7

您的MH字段在80,000行之後有非數字數據。

您可以使用ISNUMERIC function,但它是臭名昭着的錯誤,並會根據您的數據給您大量的誤報。

+0

我的所有行數80000 – programmerist 2011-03-30 15:06:12

+0

@programmerist - 這個數字是基於什麼?原始帖子中的您的查詢和您的錯誤代碼指示了其他情況。 – JNK 2011-03-30 16:03:54

0

基本上,您收到的錯誤是由於某些記錄超過前80000條記錄無法轉換爲十進制。檢查所有行上的數據> 80000

1

問題通常是MH列中的某些nvarchars確實不能轉換爲十進制。

您可以嘗試以可視方式檢查數據,但由於您擁有超過80k個記錄,這可能不可行。嘗試以其他方式檢查數據 - 您可以使用isNumeric或在列的第一個(或最後一個)三個字符上使用group by來查找錯誤數據。

0

試試這個:

SELECT max(MH) as max_mh, min(mh) as min_mh 
FROM TaskRelations 
WHERE MH is not null 

非數值應該比那些數字更低或更高。