2010-09-26 84 views
1

我有一個包含numeric(28,10)類型字段的表。我希望以等寬字體顯示記錄,並顯示匹配的小數位數,以便在右對齊時排列。查詢sql服務器結果集中的小數位數

是否有任何方法可以找出在給定結果集中可以找到的最大小數位數,以便我可以根據顯示每條記錄的格式進行相應的格式化?

編輯:對不起,我應該已經更清楚了...如果結果集包含只有3位小數的數字,那麼所有的數字應該只有3位小數(用零填充)。

回答

1

的等寬字體完全是一個演示問題...

我沒有看到你的右對齊需要當我測試:

CREATE TABLE [dbo].[Table_1](
    [num] [numeric](28, 10) NOT NULL 
) 

INSERT INTO [example].[dbo].[Table_1] VALUES (1.1234567890); 
INSERT INTO [example].[dbo].[Table_1] VALUES (1.123456789); 
INSERT INTO [example].[dbo].[Table_1] VALUES (1.1234567); 

SELECT [num] 
    FROM [example].[dbo].[Table_1] 

...的回報:

num 
--------------- 
1.1234567890 
1.1234567890 
1.1234567000 

所以問題是 - 你想做什麼,是不是給你你想要的輸出?

+0

對不起,我應該已經清楚了......如果我不需要,我不想一直走到小數點後10位。一個更好的例子是0.1,0.12,0.123應該顯示0.100,0.120,0.1123 – 2010-09-27 00:20:55

+0

@Joel Martinez:那麼你打算如何處理有10位小數的數字?! – 2010-09-27 00:22:56

+0

如果結果集中有一個有10位小數的數字,那麼我希望將*所有行*顯示爲10位小數。我想顯示沒有更多的小數位數是絕對必要的......但如果數據有必要,那麼我會顯示它們。我想這樣做的原因是因爲我希望用戶能夠掃描表格並快速比較數字。要做到這一點小數位必須排隊......並且我不想在單獨的列中顯示每個部分;-) – 2010-09-27 02:25:26

0

您想在哪裏顯示結果?查詢分析器?在應用程序中?

您可以

a) format the column to have a 
    finite number (known in advance) of 
    digits to the right of the decimal 
    point, truncating at that position; 
    this is the typical practice or 

b) read through all of the rows in the 
    resultset to determine the value 
    with the greatest number of digits 
    to the right of the decimal point 
    (casting to string, splitting the 
    value using the decimal point as 
    delimiter, and getting the length of 
    the decimal-fraction string) 

如果由於某種原因選項)是不可接受的,那麼你就必須要這麼做二)程序上,無論是服務器端,在客戶端程序中的存儲過程或客戶端。

+0

是的,我試圖避免字符串處理方法。不幸的是,如您所建議的那樣限制精度不是一種選擇。 – 2010-09-27 00:19:57