2015-09-11 3 views
0

У меня есть этот запросОбрезка десятичного до 2 цифры

SELECT CONVERT(VARCHAR(20),(((currentytd - PreviousYTD)/PreviousYTD) * 100)) + '%' as ytdGrowth from ytd 

Он возвращается: 11,224300%

Я хотел бы вернуться: 11,22%

я очень новый SQL так пытается чтобы найти правильный путь для этого.

+0

'ПРЕОБРАЗОВАНИЯ (VARCHAR (20), CONVERT (ДЕСЯТИЧНАЯ (10,2) ....... ' – Lamak

+3

Для округления используйте' round'. Если вы заботитесь о том, как печатается значение, на самом деле это задание уровня представления, а не запроса БД. – Luaan

+0

@ Luaan действительно правильно, что это должно происходить на уровне презентации, так как, делая это на конце SQL, вы 1. выполняете потенциально ненужную работу (в зависимости от того, как она представлена, она все равно может иметь завершающие нули) и 2. Сделать ваш SQL-запрос более трудным для чтения. Единственный способ, которым я лично мог бы это сделать, - это если нет слоя представления, и вы просто запускаете запросы для копирования/вставки в текстовый документ или что-то в этом роде. – user2366842

ответ

1
SELECT CONVERT(VARCHAR(20),round((((currentytd - PreviousYTD)/PreviousYTD) * 100),2)) + '%' as ytdGrowth from ytd 

Просто добавьте round(X,2) к вашему запросу

+3

ROUND должен применяться до CONVERT – EricZ

+0

Msg 8114, уровень 16, состояние 5, строка 1 Ошибка преобразования типа данных varchar в float. – JeffreyLazo

+0

@JeffreyLazo Yup, взгляните на комментарий ericZ – Lamak

0

Вы можете найти str() полезно:

SELECT str(((currentytd - PreviousYTD)/PreviousYTD) * 100.0, 5, 2) + '%' as ytdGrowth 
from ytd 
+0

Странно, что это было бы опущено без комментариев. –

+0

это не будет последовательно возвращать 2 десятичных знака – Lamak

+0

@Lamak. , , Это предполагает, что процентное значение меньше 100% (https://msdn.microsoft.com/en-us/library/ms189527.aspx), которое, как я признаю, не задано в вопросе, но представляется разумным. –

1

первым конвертировать в decimal в 2 точности (18,2), а затем nvarchar

SELECT CONVERT(VARCHAR(20),CONVERT(decimal(18,2),(((currentytd - PreviousYTD)/PreviousYTD) * 100)) ) + '%' AS ytdGrowth 
from ytd 
0

I человек союзника предпочитают CAST при работе с десятичными знаками

CAST (value as DECIMAL (9,2)) 

9 представляет общее количество символов, и 2 число символов после запятой

+0

На ваш взгляд, какая разница между 'CAST' и' CONVERT' в Это дело? – Lamak

+1

И вы получите сообщение об ошибке при добавлении '+ '%'', как это имеет OP. –

+0

Ха, не заметил символа, пока вы не указали его @GordonLinoff –