Отформатируйте количество десятичных знаков на основе другого столбца SQL - PullRequest
0 голосов
/ 09 октября 2018

Общий вопрос:

У меня есть таблица в моем SQL Server с 3 столбцами (идентификатор, значение, десятичное число).Итак, что я хочу сделать в теории, это SELECT Значение столбца, и оно должно быть отформатировано в соответствии с количеством десятичных знаков, указанных в той же строке.

Что я пробовал:

SELECT CONVERT(Decimal(18,s.Decimal), s.Value ) FROM Table s

и аналогичные запросы с CAST и FORMAT

Что я хочу:

Таблица:

ID  Value        Decimal
1   500.754254   2

Когда я запускаю запрос, он должен вернуть значение как «500,75»

Дополнительная информация: Я отображаю результат в таблице данных WPF (C #), иесли там будет проще отформатировать, я не против.Я просто не знаю как.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Это проблема презентации, и поэтому она должна решаться на уровне презентации.C # имеет очень простые способы форматирования вывода, но, как вы написали в своем вопросе, вы хотели бы знать, как сделать это в T-SQL - так что здесь есть один вариант, используя cast, charindex и left.

Сначала создайте и заполните образец таблицы ( Пожалуйста, сохраните этот шаг в своих будущих вопросах):

DECLARE @T AS TABLE
(
    id int identity(1,1),
    [Value] decimal (18,10),
    [Decimal] int
)

INSERT INTO @T ([Value], [Decimal]) VALUES
(500.754254, 2),
(50.75636, 3),
(12345.7254, 1),
(1.424, 4)

Запрос:

SELECT  ID, 
        Value, 
        [Decimal],
        LEFT(CAST([Value] As varchar(18)), CHARINDEX('.', CAST([Value] As varchar(18))) + [Decimal]) As [Left] 
FROM @T

Результаты:

ID  Value               Decimal Left
1   500,7542540000      2       500.75
2   50,7563600000       3       50.756
3   12345,7254000000    1       12345.7
4   1,4240000000        4       1.4240
0 голосов
/ 09 октября 2018

Мы можем попытаться использовать FORMAT здесь:

SELECT FORMAT(123.123456, '##.' + LEFT('##########', Decimal))
FROM yourTable;

Демо

Хитрость в том, что ширина десятичной дробиКомпонент маски определяется значением столбца Decimal.Если вы ожидаете, что вам потребуется более 10 знаков после запятой, просто увеличьте строковый литерал ###.

Другой вариант может использовать ROUND:

SELECT ROUND(Value, Decimal)
FROM yourTable;

Однако этот видФорматирование обычно лучше всего обрабатывать на уровне презентации.Итак, я бы, вероятно, искал решение для WPF / C #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...