fortuna (?), In SQL Server 2012+, è ora possibile utilizzare per raggiungere FORMAT() this:
FORMAT(@s,'#,0.0000')
Nelle versioni precedenti, con il rischio di guardare davvero brutta
[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, usiamo monetario> VARCHAR per produrre le virgole, ma FLOOR() è usato per assicurare che i decimali vadano a .00
. Questo è facilmente identificabile e sostituito con le 4 cifre dopo il decimale utilizzando una combinazione di spostamento (*10000
) e CAST come INT (troncatura) per ricavare le cifre.
[risultati]:
| COLUMN_0 |
--------------
| 1,234.1235 |
Ma se non si dispone di distribuire i report di business utilizzando SQL Server Management Studio o SQLCMD, questo è MAI la soluzione corretta, anche se si può fare. Qualsiasi ambiente front-end o di reporting ha funzioni appropriate per gestire la formattazione della visualizzazione.
I numeri non hanno formati. Ottengono la formattazione *** *** *** quando li converti in una stringa, che viene eseguita per la presentazione. E il tuo livello dati non dovrebbe preoccuparsi della presentazione. È ummm, a cosa serve uno strato di presentazione. Da SQL è necessario restituire il tipo di dati nativi e convertirlo solo per la presentazione nel front-end. * [Questo aiuta il debug, le prestazioni, l'architettura attraverso il disaccoppiamento, la manutenibilità, la flessibilità/adattabilità, ecc. Ecc ...] * – MatBailie
Concordato sul livello di presentazione, ma ci sono casi validi. Devo costruire query ad hoc in SSMS e poi inviare per e-mail i risultati. Questo è un passo in meno di cui ho bisogno per occuparmi prima di inviare le e-mail. –
Sono d'accordo; la formattazione dovrebbe essere eseguita nel livello di presentazione. Ma SSMS È il livello di presentazione qui. Inoltre, scrivo query ad-hoc e poi incollo il risultato in un foglio di calcolo per "utente finale", ovvero capo e/o ragioniere. Ora ho difficoltà perché SSMS crea punti decimali e il foglio di calcolo richiede virgole decimali. Idealmente, dovrei o con "SET DECIMAL_FORMAT =" DA_dk "o qualche opzione in SSMS essere in grado di cambiare il formato decimale .. –