Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Округление чисел в XML  [new]
hail_890
Guest
В результате выполнения запроса
select 
	round(12.3456,0) 'row/sm0',
	round(12.3456,1) 'row/sm1',
	round(12.3456,2) 'row/sm2'
FOR XML PATH('root')

получаю следующий XML
<root>
  <row>
    <sm0>12.0000</sm0>
    <sm1>12.3000</sm1>
    <sm2>12.3500</sm2>
  </row>
</root>

Как получить округленное число до определенного знака без дополнительных нулей?
<root>
  <row>
    <sm0>12</sm0>
    <sm1>12.3</sm1>
    <sm2>12.35</sm2>
  </row>
</root>
5 окт 12, 16:42    [13275344]     Ответить | Цитировать Сообщить модератору
 Re: Округление чисел в XML  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
select	 Round(T.Value,0)	AS sm0
	,Round(T.Value,1)	AS sm1
	,Round(T.Value,2)	AS sm2

	,Convert(Decimal(18,0),T.Value)	AS c_sm0
	,Convert(Decimal(18,2),T.Value)	AS c_sm1
	,Convert(Decimal(18,3),T.Value)	AS c_sm2
FROM	(VALUES (12.3456)) T(Value)
FOR XML Path('row'), Root('root')
<root>
  <row>
    <sm0>12.0000</sm0>
    <sm1>12.3000</sm1>
    <sm2>12.3500</sm2>
    <c_sm0>12</c_sm0>
    <c_sm1>12.3</c_sm1>
    <c_sm2>12.35</c_sm2>
  </row>
</root>
При конвертации Numeric в Numeric делается округление.
5 окт 12, 16:59    [13275510]     Ответить | Цитировать Сообщить модератору
 Re: Округление чисел в XML  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Mnior
	,Convert(Decimal(18,1),T.Value)	AS c_sm1
	,Convert(Decimal(18,2),T.Value)	AS c_sm2
5 окт 12, 17:00    [13275517]     Ответить | Цитировать Сообщить модератору
 Re: Округление чисел в XML  [new]
maxover
Member

Откуда:
Сообщений: 4
Можно попробовать преобразовать в тип real

SELECT ROUND(12.3456,2)
SELECT CAST(ROUND(12.3456,2) AS REAL) 


Получаем

12.3500
12.35
5 окт 12, 17:06    [13275558]     Ответить | Цитировать Сообщить модератору
 Re: Округление чисел в XML  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
maxover
в тип real
И огрести кучу проблем.

Но главное, школьники, вы хотя бы проверяйте то о чём болтаете.
SELECT	 Round(T.Value,0)	AS sm0
	,Round(T.Value,1)	AS sm1
	,Round(T.Value,2)	AS sm2

	,Convert(Decimal(18,0),T.Value)	AS c_sm0
	,Convert(Decimal(18,2),T.Value)	AS c_sm1
	,Convert(Decimal(18,3),T.Value)	AS c_sm2

	,Convert(Real,Round(T.Value,0))	AS r_sm0
	,Convert(Real,Round(T.Value,1))	AS r_sm1
	,Convert(Real,Round(T.Value,2))	AS r_sm2
FROM	(VALUES (12.3456)) T(Value)
FOR XML Path('row'), Root('root')
<root>
  <row>
    <sm0>12.0000</sm0>
    <sm1>12.3000</sm1>
    <sm2>12.3500</sm2>
    <c_sm0>12</c_sm0>
    <c_sm1>12.35</c_sm1>
    <c_sm2>12.346</c_sm2>
    <r_sm0>1.2000000e+001</r_sm0>
    <r_sm1>1.2300000e+001</r_sm1>
    <r_sm2>1.2350000e+001</r_sm2>
  </row>
</root>
5 окт 12, 17:47    [13275817]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить