Что эквивалентно PostgreSQL для функции MSSQL STR ( float_expression [ , длина [ , десятичная ] ] )?

#postgresql

Вопрос:

В MSSQL STR возвращает символьные данные, преобразованные из числовых данных. Символьные данные корректны, имеют заданную длину и десятичную точность. ВЫБЕРИТЕ STR(123.45, 6, 1), возвращающий значение «123.5» (а не «123.5») в MSSQL. Кроме того, ВЫБЕРИТЕ STR(123.45, 2, 2), верните «* * » в MSSQL.

Комментарии:

1. to_char() postgresql.org/docs/current/functions-formatting.html

Ответ №1:

Прямой соответствующей функции Postgres не существует. У вас есть пара вещей: округление переменной длины, заполнение результата и проверка длины результата. Но достаточно просто создать свою собственную функцию SQL: (см. демонстрацию)

 create or replace 
 function str(value_in   numeric   
             ,length_in  integer default 7
             ,dec_len_in integer default 2
             ) 
   returns text  
  language sql 
as $ 
   select case when length(val) > length_in 
               then rpad('*',length_in,'*')     -- or just '**' 
               else lpad(val,length_in,'#')     -- for demo using #, for real use ' '
          end
     from (select round(value_in, dec_len_in )::text) sq(val)
$;