powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как отформатировать 1234567.00000 в 1 234 567.00
11 сообщений из 11, страница 1 из 1
Как отформатировать 1234567.00000 в 1 234 567.00
    #32528803
Фотография Badger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, как можно отформатировать число, получив строку.
только это нужно, обязательно, на стороне сервера в ASE 12.5
пока в голову ничего изящного не приходит.
число может быть любым от -1 000 000 000 до +1 000 000 000

/* исходные данные */
declare @aa decimal (18,6)
declare @bb varchar (20)
SELECT @aa = 1234567.000000

????????????

Желательный результат:
SELECT @bb
-------------
1 234 567.00
...
Рейтинг: 0 / 0
Как отформатировать 1234567.00000 в 1 234 567.00
    #32528823
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По идее так:
Код: plaintext
SELECT CONVERT(varchar( 20 ), CONVERT(decimal( 14 ,  2 ), @aa))
...
Рейтинг: 0 / 0
Как отформатировать 1234567.00000 в 1 234 567.00
    #32528879
Фотография Badger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я наверное не очень точно написал
Нужны пробелы между разрядами
...
Рейтинг: 0 / 0
Как отформатировать 1234567.00000 в 1 234 567.00
    #32529214
mustlive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странная задача. Обычно форматирование вида результата требуется на клиенте, на сервере оно ни к чему. Соответственно, подходящих SQL-функций нет, я думаю, ни в одной СУБД.

В данной ситуации я вижу только одно решение: писать функцию. Исходное число конвертировать в string, разбираться с разрядами сотен, тысяч, миллионов и т.д. и вставлять пробелы в нужных местах.

Если не секрет, зачем именно на сервере делать это?
...
Рейтинг: 0 / 0
Как отформатировать 1234567.00000 в 1 234 567.00
    #32529215
mustlive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странная задача. Обычно форматирование вида результата требуется на клиенте, на сервере оно ни к чему. Соответственно, подходящих SQL-функций нет, я думаю, ни в одной СУБД.

В данной ситуации я вижу только одно решение: писать функцию. Исходное число конвертировать в string, разбираться с разрядами сотен, тысяч, миллионов и т.д. и вставлять пробелы в нужных местах.

Если не секрет, зачем именно на сервере делать это?
...
Рейтинг: 0 / 0
Как отформатировать 1234567.00000 в 1 234 567.00
    #32558817
135
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
135
Гость
SELECT
substring(str(floor(A.Balance/100),12,0),1,3)
+ ' ' + substring(str(floor(A.Balance/100),12,0),4,3)
+ ' ' + substring(str(floor(A.Balance/100),12,0),7,3)
+ ' ' + substring(str(floor(A.Balance/100),12,0),10,3)
+ '.' + substring(str(A.Balance,12,0),11,2) AS rBalance from ...
...
Рейтинг: 0 / 0
Как отформатировать 1234567.00000 в 1 234 567.00
    #32558818
135
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
135
Гость
mustlive нет, я думаю, ни в одной СУБД.
а вот PostgreSQL такое делает на ура.
...
Рейтинг: 0 / 0
Как отформатировать 1234567.00000 в 1 234 567.00
    #32559029
mustlive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у вас зато негров линчуют...
...
Рейтинг: 0 / 0
Как отформатировать 1234567.00000 в 1 234 567.00
    #32561136
135
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
135
Гость
mustliveА у вас зато негров линчуют...
не понял??? каких негров? при чём тут негры?
...
Рейтинг: 0 / 0
Как отформатировать 1234567.00000 в 1 234 567.00
    #32573594
ilya_er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
CREATE FUNCTION mc_to_money 
	(@value numeric( 38 , 19 ))
RETURNS varchar( 50 )
AS
BEGIN
  declare  @result varchar( 50 ),
         @strvalue varchar( 50 ),
         @i int,
         @delta int
  if @value= 0 
    set @result='0,00'
  else begin
    set @strvalue=str((round(@value, 2 )* 100 ), 22 , 0 )
    set @i=len(@strvalue)- 1 
    set @result=','+substring(@strvalue,@i, 2 )
    set @delta= 3 
    while @i> 1  
    begin
      if @i> 3 
        set @i=@i-@delta
      else
      begin
        set @delta=@i
        set @i= 1 
      end
      set @result=substring(@strvalue,@i,@delta)+@result
      if @i> 1 
      set @result=' '+@result
    end
  end
  set @result=ltrim(rtrim(@result))
  return @result
END
Осталось две проблемы -
1. если второй параметр для функции str дать больше 22-х, SQL Server возвращает многоточие, хотя длины поля, вроде бы, хватает
2. Если в числе больше 15 знаков до запятой, пропадает точность (думаю, это следствие первой проблемы)
...
Рейтинг: 0 / 0
Как отформатировать 1234567.00000 в 1 234 567.00
    #32573757
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мое решение для ASA9 (по идее можно переложить на любую СУБД, изменив соответствующие системные функции на аналогичные в собственной СУБД):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE FUNCTION "DBA"."fn_FormatMoney" (
  @Value money,
  @Space char( 1 ) DEFAULT ' ',
  @Div char( 1 ) DEFAULT '.'
)
RETURNS varchar( 25 )
BEGIN
  DECLARE @Str varchar( 25 );
  SET @Str = Right(Space( 15 ) || CONVERT(numeric( 15 ,  0 ), Truncnum(@Value,  0 )),  15 );

  SET @Str = 
        LTrim(SubStr(@Str,  1 ,  3 ) || ' ' || SubStr(@Str,  4 ,  3 ) || ' ' || 
              SubStr(@Str,  7 ,  3 ) || ' ' || SubStr(@Str,  10 ,  3 ) || ' ' || 
              SubStr(@Str,  13 ,  3 ));

  IF @Space <> ' '
  THEN
    SET @Str = Replace(@Str, ' ', @Space);
  END IF;

  RETURN @Str || @Div || 
    Right(CONVERT(numeric( 19 ,  2 ), Truncnum(@Value,  2 )),  2 );
END;
COMMENT ON PROCEDURE "DBA"."fn_FormatMoney" IS 'Форматирование денег в строку';
Этой функцией поддерживаются суммы по 15 знаков в целой части. При желании можно легко переделать на большее число знаков :) Работает функция довольно шустро.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как отформатировать 1234567.00000 в 1 234 567.00
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]