2010-02-10 310 views
1

我們擁有帶有貨幣數據類型列的SQL Server 2000數據庫,並且我們在貨幣列中存儲了數字的奇怪問題,我們在該列中存儲具有2位小數的數字。很長一段時間,一切都很好。但是現在我看到在一些行中,47.22號現在是47.2178號。當我選擇CAST(COLUMN作爲CHAR)結果是47.22,但是當我從ADO記錄集檢索到值時,結果爲47.2178。我瀏覽所有的應用程序,如果有任何地方它可以寫入4位小數的數字,並且什麼也找不到(並且在應用程序歷史日誌中有應用程序向數據庫寫入47.22的記錄)。它可能是一些SQL Server問題嗎?SQL Server貨幣數據類型問題

編輯:應用程序是用VB6

+1

你能發佈檢索記錄集的代碼嗎? (並且不,這可能不是SQL Server問題;-)) – Andomar 2010-02-10 15:07:05

+0

經典SQL代碼,記錄集:SELECT列FROM表WHERE條件 但是,爲什麼CAST只返回2位小數? – Cicik 2010-02-10 15:09:26

+0

好吧,'cast'轉換爲字符串服務器端。沒有看到它,很難告訴你的代碼是做什麼的,或者在什麼地方完成了錢 - >字符串轉換 – Andomar 2010-02-10 15:16:02

回答

3

你實際使用的貨幣數據類型或您使用的浮點類型?

當您使用企業管理器從該表中選擇時會發生什麼?一切看起來好嗎?

我的猜測是,你正在將數據轉換爲浮點類型。可能在ADO代碼中。

UPDATE

Per MS:當鑄造的錢給一個字符串類型,機器的語言環境發揮作用。這就是爲什麼它四捨五入到小數點後兩位。

您有三種選擇。

  1. 先投錢類型爲等效的十進制然後強制轉換結果爲char
  2. 更改機區域設置默認爲你想要的格式。
  3. 不要使用錢數據類型開始,只需使用小數。
+0

我們使用MONEY數據類型,企業管理器返回4個小數位 – Cicik 2010-02-10 15:10:58

+2

+1表示退出MONEY。 – 2010-02-10 15:26:20

+0

你有一些想法,這些4位小數位數字怎麼會出現在數據庫中,因爲從應用程序他們真的可以不用 – Cicik 2010-02-10 15:34:48

1

不要使用企業管理器來確定表中真正存儲的內容。 EM對於如何解釋數據有時會有自己的看法。

看着你CAST(....爲CHAR)的原因在文檔中解釋(尋找CAST & CONVERT)...

下表顯示了樣式值 能將 用於將貨幣或smallmoney轉換爲 字符數據。

值輸出
0(默認值)否逗號 每三位數字到 小數點的左邊,並且兩個數字在小數點的右邊 ;例如, 例如4235.98。

1逗號每 小數點左邊的三位數 小數點右邊的兩位數和小數點右邊的 ;例如,對於 ,3,510.92。

2個沒有逗號 每三位數字 小數點左邊,四個數字小數點的 權利;例如,對於 例如4235.9819。

編輯:終於想出瞭如何使用BlockQuote功能。 :-)