Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server formata casas decimais com vírgulas


Felizmente(?), no SQL Server 2012+ , agora você pode usar FORMAT() Para alcançar isto:
FORMAT(@s,'#,0.0000')


Nas versões anteriores, correndo o risco de ficar muito feio
[Consulta] :
declare @s decimal(18,10);
set @s = 1234.1234567;
select replace(convert(varchar,cast(floor(@s) as money),1),'.00',
    '.'+right(cast(@s * 10000 +10000.5 as int),4))

Na primeira parte, usamos MONEY->VARCHAR para produzir as vírgulas, mas FLOOR() é usado para garantir que os decimais vão para .00 . Isso é facilmente identificável e substituído pelos 4 dígitos após a casa decimal usando uma mistura de deslocamento (*10000 ) e CAST como INT (truncamento) para derivar os dígitos.

[Resultados] :
|   COLUMN_0 |
--------------
| 1,234.1235 |

Mas, a menos que você precise entregar relatórios de negócios usando o SQL Server Management Studio ou SQLCMD, isso é NUNCA a solução correta, mesmo que isso possa ser feito. Qualquer ambiente front-end ou de relatórios possui funções adequadas para lidar com a formatação de exibição.