Проблемы с отображением десятичных знаков с помощью функции CONVERT в SQL Server - PullRequest
0 голосов
/ 06 августа 2011

Я работаю над заданием для класса, и я застрял около двух часов над этим вопросом:

"Спроецируйте среднюю общую стоимость счета, минимальную общую сумму и максимальную общую стоимость. Деньгивсегда отформатирован с двумя десятичными разрядами. "

Итак, я пришел с этим запросом:

SELECT
CONVERT(DECIMAL(8),AVG(INV.TotalPrice),2) AS 'Average Price',
CONVERT(DECIMAL(8),MIN(INV.TotalPrice),2) AS 'Miniumum Price',
CONVERT(DECIMAL(8),MAX(INV.TotalPrice),2) AS 'Maximum Price'
FROM INVOICE INV;

Математические функции работают нормально, но я не могу получить числа последесятичная точка и сама десятичная точка после цены.Например, на «Средняя цена» я получаю «187», но мне нужно «187,00».

Я немного застрял.Я пытался просмотреть другие вопросы о переполнении стека, но не нашел ответа на свои вопросы.Любая помощь будет оценена.

Ответы [ 2 ]

2 голосов
/ 06 августа 2011

Проблема в том, что вы конвертируете в числовой тип.Числовые типы представляют количество, поэтому вы должны думать о них так же, как и о математике.

187 == 187.0 == 187.00000 == 187.0000000000

Все они имеют одинаковое значение, поэтому в числовом виде они будут представлены одинаково (обычно).

Строки представляют собой символы, которые составляют значение.Строки могут представлять текст, такой как «Это строка» или «Быстрая коричневая собака» или «235136513509835».

В строках:

"187" != "187.00" != "187.0000"

Исходя из этого, я бы рекомендовал преобразовать встрока.У меня нет машины с Windows, поэтому я не могу подтвердить, но попробуйте что-то вроде:

SELECT
CAST(CONVERT(DECIMAL(8,2),AVG(INV.TotalPrice)) AS varchar(8)) AS 'Average Price',
CAST(CONVERT(DECIMAL(8,2),MIN(INV.TotalPrice)) AS varchar(8)) AS 'Miniumum Price',
CAST(CONVERT(DECIMAL(8,2),MAX(INV.TotalPrice)) AS varchar(8)) AS 'Maximum Price'
FROM INVOICE INV;

Посмотрите здесь: http://msdn.microsoft.com/en-us/library/ms187928.aspx

2 голосов
/ 06 августа 2011
SELECT
CONVERT(DECIMAL(8,2),AVG(INV.TotalPrice)) AS 'Average Price',
CONVERT(DECIMAL(8,2),MIN(INV.TotalPrice)) AS 'Miniumum Price',
CONVERT(DECIMAL(8,2),MAX(INV.TotalPrice)) AS 'Maximum Price'
FROM INVOICE INV;

Числовому типу DECIMAL требуется второй аргумент (шкала), чтобы вернуть два десятичных знака. Похоже, вы поняли это почти правильно, но аргумент был передан не в том месте.

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