簡體   English   中英

顯示的DB2數值不帶小數位,MS SQL中的鏈接服務器

[英]DB2 numeric values shown with no decimal places, linked server in MS SQL

我對DB2數據庫運行查詢時遇到問題。 有些列的數值返回小數點后的小數位,例如,我有一個VPACKSP.VPTARA字段,其中包含塔拉重量。

運行這樣的查詢

SELECT VPACKSP.VPTARA FROM VPACKSP WHERE VPACKSP.VPTEIL = 123456 

返回值0,000正確的值應該是0,880

運行數值相乘的查詢將返回正確的值,但要高出多個倍

SELECT VPACKSP.VPTARA * 100 FROM VPACKSP WHERE VPACKSP.VPTEIL = 123456 

返回值

88,000

使用Windows Server上安裝的ODBC 64位ISeries訪問驅動程序版本13.00.01.0運行查詢。 我使用的客戶端是Microsoft SQL Server,其中使用ODBC的OLE DB提供程序創建了鏈接服務器。

實際查詢如下所示:

SELECT 
* 
FROM OPENQUERY(
  [LINKEDSERVERNAME]
,'SELECT VPACKSP.VPTARA FROM VPACKSP WHERE VPACKSP.VPTEIL = 123456'
)
;

並非所有數字列都發生這種情況。 我試圖將其轉換為NUMERIC(32,16)以及DECIMAL(10,5) ,以及其他小數位組合,但所有結果均為零,僅乘法有效。 有什么可能是錯的嗎?

塞巴斯蒂安想到兩件事:

a)DB2中的DECIMAL數據類型,將值存儲為每位半個字節,在最右邊的半字節中加上十六進制C(表示正數)和十六進制D(表示負數)(如果是DECIMAL(4,3),則為0.880),以十六進制00 88 0C的形式存儲在三個字節中,小數點的位置保留在DBMS的元數據中。 因此,ODBC驅動程序可能會嚴重翻譯它。

b)同樣在ODBC層級別:驅動程序可能會遇到這樣的事實,在德國,您使用逗號而不是點作為小數點分隔符,並且驅動程序在找到一個不希望出現的字符時立即停止數字文字-您的逗號。

我將使用普通的ODBC SQL客戶端(例如Microsoft ODBC測試工具)測試您的查詢(只是示例中單引號之間的查詢)。 我希望該錯誤返回相同的錯誤,因此您至少要報告一個錯誤。

解決方法是將Windows中的語言設置(可能是臨時性的)配置為使用點而不是逗號作為小數點分隔符(而逗號而不是德國點可能將其用作千位分隔符),這樣就不會創建混亂)。

兩個小時后-解決方法的另一個想法:您可以嘗試:

SELECT 
  CAST(VPACKSP.VPTARA AS VARCHAR(16)) AS vptara
FROM VPACKSP 
WHERE VPACKSP.VPTEIL = 123456

這樣,您就可以讓DB2執行到字符串的轉換,而不必將其留在前端-只是一個主意...

祝好運 -

Marco the Sane

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM