Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как отформатировать 1234567.00000 в 1 234 567.00 / 11 сообщений из 11, страница 1 из 1
21.05.2004, 17:37
    #32528803
Badger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отформатировать 1234567.00000 в 1 234 567.00
Народ, как можно отформатировать число, получив строку.
только это нужно, обязательно, на стороне сервера в 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
21.05.2004, 17:48
    #32528823
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отформатировать 1234567.00000 в 1 234 567.00
По идее так:
Код: plaintext
SELECT CONVERT(varchar( 20 ), CONVERT(decimal( 14 ,  2 ), @aa))
...
Рейтинг: 0 / 0
21.05.2004, 18:20
    #32528879
Badger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отформатировать 1234567.00000 в 1 234 567.00
Я наверное не очень точно написал
Нужны пробелы между разрядами
...
Рейтинг: 0 / 0
22.05.2004, 11:04
    #32529214
mustlive
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отформатировать 1234567.00000 в 1 234 567.00
Странная задача. Обычно форматирование вида результата требуется на клиенте, на сервере оно ни к чему. Соответственно, подходящих SQL-функций нет, я думаю, ни в одной СУБД.

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

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

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

Если не секрет, зачем именно на сервере делать это?
...
Рейтинг: 0 / 0
11.06.2004, 18:28
    #32558817
135
135
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отформатировать 1234567.00000 в 1 234 567.00
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
11.06.2004, 18:28
    #32558818
135
135
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отформатировать 1234567.00000 в 1 234 567.00
mustlive нет, я думаю, ни в одной СУБД.
а вот PostgreSQL такое делает на ура.
...
Рейтинг: 0 / 0
11.06.2004, 21:47
    #32559029
mustlive
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отформатировать 1234567.00000 в 1 234 567.00
А у вас зато негров линчуют...
...
Рейтинг: 0 / 0
15.06.2004, 10:59
    #32561136
135
135
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отформатировать 1234567.00000 в 1 234 567.00
mustliveА у вас зато негров линчуют...
не понял??? каких негров? при чём тут негры?
...
Рейтинг: 0 / 0
23.06.2004, 13:02
    #32573594
ilya_er
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отформатировать 1234567.00000 в 1 234 567.00
Код: 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
23.06.2004, 13:49
    #32573757
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отформатировать 1234567.00000 в 1 234 567.00
Мое решение для 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
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как отформатировать 1234567.00000 в 1 234 567.00 / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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