Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server formatta i decimali con le virgole

Per fortuna(?), in SQL Server 2012+ , ora puoi utilizzare FORMAT() per raggiungere questo obiettivo:

FORMAT(@s,'#,0.0000')

Nelle versioni precedenti, a rischio di sembrare davvero brutti

[Richiesta] :

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))

Nella prima parte, utilizziamo MONEY->VARCHAR per produrre le virgole, ma FLOOR() viene utilizzato per garantire che i decimali vadano a .00 . Questo è facilmente identificabile e sostituito con le 4 cifre dopo la cifra decimale utilizzando una combinazione di spostamento (*10000 ) e CAST come INT (troncamento) per derivare le cifre.

[Risultati] :

|   COLUMN_0 |
--------------
| 1,234.1235 |

Tuttavia, a meno che non sia necessario fornire report aziendali utilizzando SQL Server Management Studio o SQLCMD, questo è MAI la soluzione corretta, anche se si può fare. Qualsiasi front-end o ambiente di reporting dispone delle funzioni appropriate per gestire la formattazione del display.