Salve,
e' solitamente buona cosa mostrare il “codice” di cosa si e' gia' preparato per poterlo di solito almeno “commentare/correggere” insieme :D
comunque, a me, l'esportazione “base” di un decimal(18,5) 9579.01000 NON RITORNA 957.901.000, bensi' , appunto, 9579.01000 .
se vuoi comunque “troncarlo” al 2^ decimale, devi convertire il decimal(18,5) in un decimal(18,2), preceduto tendenzialmente da un ROUND(…) dove puoi anche impostare che tipo di arrotondamento desideri, ad esempio il puro troncamento al 2^ con ROUND(valore. 2, 1)
(vedi sinossi di ROUND sui BOL di Microsoft)
Tu desideri anche il simbolo di valuta a precedere, e sarebbe da valutare se questa valorizzazione e' una costante o dipendente da altra impostazione, compresa anche l'impostazione “internazionale” della login connessa a SQL Server, perche' di base, appunto, la valorizzazione del datatype {money} segue l'impostazione internazionale della login corrente.
presupponendo che tu voglia un simbolo “costante” = €
devi quindi concatenare una selezione castata in un varchar(sufficientemente dimensionata) di ‘€’ + valore arrotondato del decimal(18,5).
trivialmente, considerando lo scenario seguente,
CREATE TABLE dbo.Test (
Id int NOT NULL PRIMARY KEY,
DataVC varchar(10),
DataDT datetime,
DataDC decimal(18, 5)
);
INSERT dbo.Test
VALUES (1, 'a2345f7890', GETDATE(), 9579.01);
--<------
SELECT Id, DataVC, DataDT, '€' + CONVERT(varchar(20), CONVERT(decimal(18,2),ROUND(DataDC, 2, 1))) FROM dbo.Test;
che verra' poi eseguito come
sqlcmd -E -S.\istanza -d nomeDB -o "C:\temp\atest.csv" -Q "SET NOCOUNT ON; SELECT Id, DataVC, DataDT, '€' + CONVERT(varchar(20), CONVERT(decimal(18,2),ROUND(DataDC, 2, 1))) FROM dbo.Test;" -s"," -h-1
--<---file C:\temp\atest.csv -----
1,a2345f7890,2024-05-23 09:09:55.950,€9579.01
presta attenzione alla valorizzazione del parametro -w, che dimensiona la riga di esportazione e deve essere sufficientemente dimensionata per accogliere “la riga piu' lunga”
salutoni romagnoli
–
Andrea