Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вопрос по конвертации числа в строку  [new]
mod
Member

Откуда:
Сообщений: 2318
convert(nvarchar,sum(s_val)) даёт число, с двумя знаками в десятичной части... В итоге целые числа пишутся с двумя нулями после точки (4.00). Как сделать чтобы целые числа были без дробной части, а дробные десятичную часть сохраняли? Вероятно это просто.
2 авг 12, 11:16    [12950852]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по конвертации числа в строку  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
replace(convert(nvarchar,sum(s_val)), '.00', '')
2 авг 12, 11:19    [12950876]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по конвертации числа в строку  [new]
mod
Member

Откуда:
Сообщений: 2318
invm,

мда, я думал можно проще.... Жаль... Но спасибо....
2 авг 12, 11:20    [12950880]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по конвертации числа в строку  [new]
Glory
Member

Откуда:
Сообщений: 104751
mod
Как сделать чтобы целые числа были без дробной части, а дробные десятичную часть сохраняли?

Столбцец/поле для всех строк имеет один тип. Он не может быть для одной записи integer, а для другой - decimal.
2 авг 12, 11:24    [12950908]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по конвертации числа в строку  [new]
mod
Member

Откуда:
Сообщений: 2318
Glory,

В Oracle просто в to_char() задаётся маска преобразования и можно легко сделать так. Вот и всё. Тут не вопрос изначального типа - конечный всё одно строковый.
2 авг 12, 11:31    [12950974]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по конвертации числа в строку  [new]
Glory
Member

Откуда:
Сообщений: 104751
mod
Тут не вопрос изначального типа - конечный всё одно строковый.

"В итоге целые числа пишутся с двумя нулями после точки (4.00)."
Тип данных sum(s_val) НЕ целое число. Он - десятичное число. Наличие нулей после точки не делает тип целочисленным.

mod
В Oracle просто в to_char() задаётся маска преобразования и можно легко сделать так

В хелпе функции convert тоже описаны все ее возможные аргументы
2 авг 12, 11:35    [12951016]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по конвертации числа в строку  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
mod,

Переходите на SQL Server 2012 -- там есть функция format.
2 авг 12, 11:42    [12951091]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по конвертации числа в строку  [new]
mod
Member

Откуда:
Сообщений: 2318
invm,
В МS SQL 2012 безусловно много нового хорошего, но сами понимаете, что если проект внедрён на другой версии, то тут уже ничего не поделать. Да и покупка лицензий тоже дело не дешевое. Так что просто остаётся сожаление что этого не было. replace это выход в данном случае. В целом есть ощущение что MS SQL развивается динамично и от версии к версии становится всё интереснее...
2 авг 12, 11:58    [12951243]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по конвертации числа в строку  [new]
Shlippenbaranus
Member

Откуда:
Сообщений: 241
mod
В целом есть ощущение что MS SQL развивается динамично и от версии к версии становится всё интереснее...

Оглядевшсь, и заговорщицким тоном: да, все ближе и ближе к правильной СУБД...
2 авг 12, 14:27    [12952720]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по конвертации числа в строку  [new]
для тупых
Guest
почему money округляется при конвертации в строку, а decimal(5,4) нет?
у обоих же 4 знака после запятой

DECLARE @val_m money =0.5555
DECLARE @val_d decimal(5,4) =0.5555
SELECT CAST(@val_d as nvarchar(10)) as decimal_, CAST(@val_m as nvarchar(10)) as money_
-------------------
decimal_	money_
0.5555	0.56
2 авг 12, 14:40    [12952836]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по конвертации числа в строку  [new]
Glory
Member

Откуда:
Сообщений: 104751
для тупых
почему money округляется при конвертации в строку, а decimal(5,4) нет?
у обоих же 4 знака после запятой

Читать документацию внимательнее

CONVERT(nvarchar(10),@val_m,126)
2 авг 12, 15:17    [12953285]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по конвертации числа в строку  [new]
для тупых
Guest
простите за настойчивость.
специально иду поиском по статье CAST and CONVERT.
ищу на "money"

получаю про стиль 126 -- ок.
(money and smallmoney Styles
When expression is money or smallmoney, style can be one of the values shown in the following table...)

получаю про Truncating and Rounding Results, но там про другое.
(When you convert character or binary expressions (char, nchar, nvarchar, varchar, binary, or varbinary) to an expression of a different data type, data can be truncated, only partially displayed, or an error is returned because the result is too short to display...)

еще попадается пример конвертирования для использования с like
(E. Using CAST with the LIKE clause)

и нигде не вижу, чтоб было написано например "не используйте cast с money, а используйте convert".
или что cast от money к varchar округляет.
ткните носом, пожалуйста
2 авг 12, 15:38    [12953536]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по конвертации числа в строку  [new]
Glory
Member

Откуда:
Сообщений: 104751
для тупых
получаю про Truncating and Rounding Results, но там про другое.
(When you convert character or binary expressions (char, nchar, nvarchar, varchar, binary, or varbinary) to an expression of a different data type, data can be truncated, only partially displayed, or an error is returned because the result is too short to display...)

Вы конвертите наоборот в character

для тупых
и нигде не вижу, чтоб было написано например "не используйте cast с money, а используйте convert".


money and smallmoney Styles
When expression is money or smallmoney, style can be one of the values shown in the following table. Other values are processed as 0.

Value Output
0 (default)
No commas every three digits to the left of the decimal point, and two digits to the right of the decimal point; for example, 4235.98.

1
Commas every three digits to the left of the decimal point, and two digits to the right of the decimal point; for example, 3,510.92.

2
No commas every three digits to the left of the decimal point, and four digits to the right of the decimal point; for example, 4235.9819.

126
Equivalent to style 2 when converting to char(n) or varchar(n)

CAST есть CONVERT с дефолтным значением стиля. Вы использовали CAST и получили документированный результат.
2 авг 12, 15:44    [12953601]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по конвертации числа в строку  [new]
для тупых
Guest
спасибо.
написанное наверху про стили мне как раз в поиске попалось.
а вот что впервые сышу, так это:
CAST есть CONVERT с дефолтным значением стиля
как-то казалось, что CAST это ANSI (т.е. никакого отношения к CONVERT не имеет и не может),
а CONVERT - его MS-расширение.
2 авг 12, 15:52    [12953679]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по конвертации числа в строку  [new]
Glory
Member

Откуда:
Сообщений: 104751
для тупых
а вот что впервые сышу, так это:
CAST есть CONVERT с дефолтным значением стиля
как-то казалось, что CAST это ANSI (т.е. никакого отношения к CONVERT не имеет и не может),
а CONVERT - его MS-расширение.

ANSI означает соответствие синтаксису ANSI.
А не какая то особая/отдельная реализация конвертирования
Поэтому нет и отдельной статьи в хелпе про CAST
2 авг 12, 15:58    [12953724]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по конвертации числа в строку  [new]
для тупых
Guest
Glory,
еще раз спасибо за разъяснение
2 авг 12, 16:26    [12953933]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по конвертации числа в строку  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
Во флоат, а потом в строку - сама оставит столько цифр после запятой, сколько нужно.

SELECT 0.1, CAST(CAST(0.1 AS float) AS NVARCHAR(MAX))
UNION ALL SELECT 0.11, CASt(CAST(0.11 AS float) AS NVARCHAR(MAX))
UNION ALL SELECT 10.0111, CASt(CAST(10.0111 AS float) AS NVARCHAR(MAX))
2 авг 12, 19:14    [12955013]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по конвертации числа в строку  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
(No column name) (No column name)
0.1000 0.1
0.1100 0.11
10.0111 10.0111
2 авг 12, 19:15    [12955014]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по конвертации числа в строку  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Программист-Любитель,
SELECT 0.123456789, CAST(CAST(0.123456789 AS float) AS NVARCHAR(MAX))
2 авг 12, 19:34    [12955081]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по конвертации числа в строку  [new]
2king2
Member

Откуда:
Сообщений: 545
invm,

Покажите код, как это выглядит в 2012, пожалуйста.
25 окт 12, 11:27    [13373015]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить