Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Функция форматирования числа в строку  [new]
правильный проходящий.
Guest
Здравствуйте.
При переносе некоего кода на t-sql понадобилась замена функции, которая конвертирует число в строку с обрезанием всех пробелов, концевых нулей и разделительной точки, если за ней только нули. После точки должно оставаться не более двух цифр. Перед точкой не менее одного нуля.
Примеры:
0.10 -> 0.1
0.01 -> 0.01
0.00 -> 0
10.00 -> 10

В справке я что-то ничего похожего не нашел. Но может кто уже таки наваял такую функцию?
24 авг 15, 12:56    [18059539]     Ответить | Цитировать Сообщить модератору
 Re: Функция форматирования числа в строку  [new]
invm
Member

Откуда: Москва
Сообщений: 9830
declare @t table (v numeric(38,2));
insert into @t
values
 (0.10),
 (0.01),
 (0.00),
 (10.00);

select
 t.v, c.s
from
 @t t cross apply
 (select ltrim(str(t.v, 38, 2))) a(s) cross apply
 (select replace(rtrim(replace(a.s, '0', ' ')), ' ', '0')) b(s) cross apply
 (select replace(rtrim(replace(b.s, '.', ' ')), ' ', '.')) c(s);
24 авг 15, 13:19    [18059706]     Ответить | Цитировать Сообщить модератору
 Re: Функция форматирования числа в строку  [new]
o-o
Guest
declare @t table (d decimal(10,5)) 
insert into @t values (0.10), (0.01), (0.00), (10.00);

with cte as
(
select *, reverse(replace(ltrim(replace(reverse(CAST(d as varchar(20))), 0, ' ')), ' ', 0)) as s1
from @t
)

select *, case when CHARINDEX('.', s1) = LEN(s1) then LEFT(s1, LEN(s1) - 1)
               else s1
          end      
from cte;
24 авг 15, 13:24    [18059741]     Ответить | Цитировать Сообщить модератору
 Re: Функция форматирования числа в строку  [new]
o-o
Guest
в смысле, в CTE -- отбрасывание нулей,
а потом и точки.
если не нравится CTE, надо вместо S1 в CASE вписать
reverse(replace(ltrim(replace(reverse(CAST(d as varchar(20))), 0, ' ')), ' ', 0))

будет очень красиво
24 авг 15, 13:28    [18059766]     Ответить | Цитировать Сообщить модератору
 Re: Функция форматирования числа в строку  [new]
правильный проходящий.
Guest
invm, o-o,
большой спасиб. Буду пробовать.
24 авг 15, 16:33    [18060231]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить