Запрос количества десятичных знаков в наборе результатов сервера SQL - PullRequest
1 голос
/ 27 сентября 2010

У меня есть таблица, которая содержит поле типа numeric(28,10).Я хотел бы отображать записи с моноширинным шрифтом и соответствующим количеством десятичных разрядов, чтобы они выстраивались в линию при выравнивании по правому краю.

Есть ли способ определить максимальное количество десятичных разрядов, которое можно найти в данном наборе результатов, чтобы я мог соответствующим образом форматировать при отображении каждой записи?

Редактировать: извините, я должен был быть более ясным ... если результирующий набор содержит числа только с 3 десятичными знаками, то все числа должны иметь только 3 десятичных знака (дополненные нулями).

Ответы [ 2 ]

1 голос
/ 27 сентября 2010

Моноширинный шрифт является проблемой презентации ...

Я не вижу необходимости выравнивания по правому краю при тестировании:

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 голосов
/ 27 сентября 2010

Где вы хотите отобразить результаты? Анализатор запросов? В приложении?

Вы можете либо

 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)

Если по какой-либо причине вариант а) является неприемлемым, вы должны выполнить б) процедурно, либо на стороне сервера в хранимой процедуре, либо на стороне клиента в вашей клиентской программе.

...