PostgreSQL - Formatar valor monetário no postgres LATIN1

Já tentei com as funções nativas,mas não funciona pois meu banco é latin1
alguém tem alguma solução?

Formata no front end.

preciso q senha via sql mesmo.

Logicamente o tipo do campo deverá ser decimal/numeric.

já vi esses exemplos, não funciona no banco latin 1

Recria e migra o banco pra utf8 ou entao vai ter que formatar na unha, substituindo ponto por vírgula e a cada milhar colocar ponto.

A função abaixo resolve seu problema…


---select FormataValor(2750,'.',',');
CREATE OR REPLACE FUNCTION FormataValor(p_Valor Decimal(18,2),p_SepMilhar char(1),p_SepDecimal Char(1))    

/* SQLINES DEMO *** ect dbo.FormataValor (10000, '.', ',') 
*/        

Returns  Varchar(50) AS $$            
  Declare v_Inteiro char(100);            
          v_Texto varchar(50);            
          v_ValorDecimal varchar(100);
Begin
          
            
  v_Texto := RTrim(Cast(p_Valor as varchar(50)));            
  v_Inteiro := Cast(p_Valor as BIGINT);            
  v_ValorDecimal := SubString(v_Texto,length(v_Texto)-1,2);            
           
  If length(v_Inteiro) = 1 Then          
     v_Texto := (Cast(v_Inteiro as varchar(10))) || p_SepDecimal || v_ValorDecimal;
  End if;          
            
  If length(v_Inteiro) = 2 Then          
     v_Texto := (Cast(v_Inteiro as varchar(10))) || p_SepDecimal || v_ValorDecimal;
  End if;          
          
  If length(v_Inteiro) = 3 Then            
     v_Texto := (Cast(v_Inteiro as varchar(10))) || p_SepDecimal || v_ValorDecimal;
  End if;            
            
  If length(v_Inteiro) = 4 Then            
     v_Texto := SubString(Cast(v_Inteiro as varchar(10)),1,1) || p_SepMilhar ||  SubString(Cast(v_Inteiro as varchar(10)),2,3) || p_SepDecimal || v_ValorDecimal;
  End if;            
            
  If length(v_Inteiro) = 5 Then            
     v_Texto := SubString(Cast(v_Inteiro as varchar(10)),1,2) || p_SepMilhar ||  SubString(Cast(v_Inteiro as varchar(10)),3,3) || p_SepDecimal || v_ValorDecimal;
  End if;            
            
  If length(v_Inteiro) = 6 Then            
     v_Texto := SubString(Cast(v_Inteiro as varchar(10)),1,3) || p_SepMilhar ||  SubString(Cast(v_Inteiro as varchar(10)),4,3) || p_SepDecimal || v_ValorDecimal;
  End if;            
            
  If length(v_Inteiro) = 7 Then            
     v_Texto := SubString(Cast(v_Inteiro as varchar(10)),1,1) || p_SepMilhar ||  SubString(Cast(v_Inteiro as varchar(10)),2,3) || p_SepMilhar || SubString(Cast(v_Inteiro as varchar(10)),5,3) || p_SepDecimal || v_ValorDecimal;
  End if;           
            
  If length(v_Inteiro) = 8 Then            
     v_Texto := SubString(Cast(v_Inteiro as varchar(10)),1,2) || p_SepMilhar ||  SubString(Cast(v_Inteiro as varchar(10)),3,3) || p_SepMilhar || SubString(Cast(v_Inteiro as varchar(10)),6,3) || p_SepDecimal || v_ValorDecimal;
  End if;           
           
  If length(v_Inteiro) = 9 Then            
     v_Texto := SubString(Cast(v_Inteiro as varchar(10)),1,3) || p_SepMilhar ||  SubString(Cast(v_Inteiro as varchar(10)),4,3) || p_SepMilhar || SubString(Cast(v_Inteiro as varchar(10)),7,3) || p_SepDecimal || v_ValorDecimal;
  End if;           
            
   If length(v_Inteiro) = 10 Then            
     v_Texto := SubString(Cast(v_Inteiro as varchar(10)),1,1) || p_SepMilhar ||  SubString(Cast(v_Inteiro as varchar(10)),2,3) || p_SepMilhar || SubString(Cast(v_Inteiro as varchar(10)),5,3) || p_SepMilhar || SubString(Cast(v_Inteiro as varchar(10)),8,3) || p_SepDecimal || v_ValorDecimal;
   End if;           
  Return v_Texto;            
End;
$$ LANGUAGE plpgsql;

obrigado!!