Discussione:
Chiarimento su tipo di dati MONEY
(troppo vecchio per rispondere)
the_poet
2005-01-14 15:02:13 UTC
Permalink
Salve ragazzi, se io imposto a MONEY il tipo di dati di una colonna (nome
della colonna = "Valore" della tabella "Articoli") ed eseguo

INSERT [Articoli] ([Valore]) VALUES (1.20)

e successivamente eseguo la query

SELECT * FROM [Articoli]

ottengo come output 1.2000, come faccio ad ottenere in output 1.20 (cioè il
formato standard dell'euro)? Nelle impostazioni internazionali ho
controllato il formato della valuta e sulla macchina in cui eseguo SQL
Server è correttamente impostato con 2 cifre decimali.
Qualcuno mi chiarisce il concetto?
David
2005-01-14 15:11:35 UTC
Permalink
Post by the_poet
Salve ragazzi, se io imposto a MONEY il tipo di dati di una colonna (nome
della colonna = "Valore" della tabella "Articoli") ed eseguo
INSERT [Articoli] ([Valore]) VALUES (1.20)
e successivamente eseguo la query
SELECT * FROM [Articoli]
ottengo come output 1.2000, come faccio ad ottenere in output 1.20 (cioè il
formato standard dell'euro)? Nelle impostazioni internazionali ho
controllato il formato della valuta e sulla macchina in cui eseguo SQL
Server è correttamente impostato con 2 cifre decimali.
Ciao the_poet,
e nella macchina in cui esegui la query, qual'è l'impostazione
internazionale?
--
David
the_poet
2005-01-14 15:15:02 UTC
Permalink
La macchina è la medesima genio
David
2005-01-14 16:27:21 UTC
Permalink
Post by the_poet
La macchina è la medesima genio
Queste dimostrazioni di simpatia non sono il massimo, visto che comunque
chi risponde lo fa con lo scopo di aiutare, anche se sbaglia.
In ogni caso, la risposta non era ovvia, visto che non avevi specificato...

Ciao!
--
David
the_poet
2005-01-17 08:14:34 UTC
Permalink
I formati di output di sql server (per esempio la data o la lingua)
dipendono dal server che esegue il motore di database e non dal client che
consuma i dati...

Lorenzo Benaglia
2005-01-14 15:26:34 UTC
Permalink
Post by the_poet
ottengo come output 1.2000, come faccio ad ottenere in output 1.20
(cioè il formato standard dell'euro)?
Ciao the_poet,

come puoi notare leggendo i BOL, i datatype money e smallmoney prevedono 4
cifre decimali.
Ora, tutte le formattazioni *devono* essere eseguite client side.
Se per qualche motivo hai bisogno di eseguire una formattazione server side
casta la colonna money in decimal o numeric, specificando 2 come scale.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com
http://italy.mvps.org
Andrea Benedetti
2005-01-14 15:24:57 UTC
Permalink
Salve the_poet,
Post by the_poet
Salve ragazzi, se io imposto a MONEY il tipo di dati di una colonna (nome
della colonna = "Valore" della tabella "Articoli") ed eseguo
INSERT [Articoli] ([Valore]) VALUES (1.20)
e successivamente eseguo la query
SELECT * FROM [Articoli]
ottengo come output 1.2000, come faccio ad ottenere in output 1.20 (cioè il
formato standard dell'euro)? Nelle impostazioni internazionali ho
controllato il formato della valuta e sulla macchina in cui eseguo SQL
Server è correttamente impostato con 2 cifre decimali.
Qualcuno mi chiarisce il concetto?
Una cosa è il formato della macchina, l'altro il formato dei campi di sql
server.
Il formato money lavora come vedi...
Per "troncarlo" a due decimali puoi utilizzare una conversione a decimal.

Prova nel tuo query analyzer:
declare @spesa money

set @spesa = 12.3456

select @spesa as spesa
select cast(@spesa as decimal(10,2)) as spesaConDueDecimali

Saluti,
Andrea
Marcello
2005-01-14 15:28:08 UTC
Permalink
Ciao,

il tipo dato Money non si adatta alle impostazioni del server ma è
semplicemente un decimal con precision e scale fissi "adatto" alle esigenze
finanziarie.
Indubbiamente, da un certo punto di vista, money non è altro che un alias
ambiguo che forse sarebbe meglio creare di volta in volta come tipo dato
utente.
Corrisponde un po' al currency di vb6, sparito [giustamente] con .Net.

marc.
Post by the_poet
Salve ragazzi, se io imposto a MONEY il tipo di dati di una colonna (nome
della colonna = "Valore" della tabella "Articoli") ed eseguo
INSERT [Articoli] ([Valore]) VALUES (1.20)
e successivamente eseguo la query
SELECT * FROM [Articoli]
ottengo come output 1.2000, come faccio ad ottenere in output 1.20 (cioè il
formato standard dell'euro)? Nelle impostazioni internazionali ho
controllato il formato della valuta e sulla macchina in cui eseguo SQL
Server è correttamente impostato con 2 cifre decimali.
Qualcuno mi chiarisce il concetto?
Andrea Montanari
2005-01-14 15:36:40 UTC
Permalink
salve,
Post by the_poet
Salve ragazzi, se io imposto a MONEY il tipo di dati di una colonna
(nome della colonna = "Valore" della tabella "Articoli") ed eseguo
INSERT [Articoli] ([Valore]) VALUES (1.20)
e successivamente eseguo la query
SELECT * FROM [Articoli]
ottengo come output 1.2000, come faccio ad ottenere in output 1.20
(cioè il formato standard dell'euro)? Nelle impostazioni
internazionali ho controllato il formato della valuta e sulla
macchina in cui eseguo SQL Server è correttamente impostato con 2
cifre decimali.
Qualcuno mi chiarisce il concetto?
il tipo di dato MONEY, come puoi vedere anche presso
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ma-mz_49q1.asp ,
include supporto di storage fino al quarto decimale, che e' cio' che in
effetti ti viene restituito..
devi per cui personalmente provvedere a rimuovere i decimali a te non
interessanti a livello client, ovvero a restituire un tipo di dato diverso
direttamente lato client, ad esempio utilizzando un NUMERIC ( n , 2 ) ovvero
facendone apposita conversione similarmente a
SET NOCOUNT ON
DECLARE @m MONEY, @n NUMERIC ( 10 , 2 )
SET @m = 1.2
SET @n = @m
SELECT @m AS [Money] , @n AS [Numeric] , CONVERT( NUMERIC(10,2), @m ) AS
[Casted Money]
--<-------------
Money Numeric Casted Money
--------------------- ------------ ------------
1.2000 1.20 1.20

saluti
--
Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz/DbaMgr.shtm http://italy.mvps.org
DbaMgr2k ver 0.9.1 - DbaMgr ver 0.55.1
(my vb6+sql-dmo little try to provide MS MSDE 1.0 and MSDE 2000 a visual
interface)
--------- remove DMO to reply
Continua a leggere su narkive:
Loading...