Grazie mille a tutti...
I 2 parametri che identificano un valore decimal sono, rispettivamente, la
precisione e la scala. La precisione è il numero di cifre (interi e
decimali) che rappresentano il valore numerico mentre la scala è il "di cui"
che rappresenta la parte decimale. Pertanto un valore di tipo DECIMAL (5, 5)
sarà in grado di rappresentare valori compresi tra -0.99999 e +0.99999
Suppongo, quindi, che tu voglia convertire il numero in DECIMAL (10, 5)...
> Se ad esempio il numero fosse stato 0000521000 la relativa conversione
> sarebbe diventata 5.21...
Nell'esempio che segue utilizzo la funzione CONVERT per trasformare la
stringa in un valore DECIMAL (10, 0) (ma poteva essere anche un INT)
dopodichè divido il risultato per il valore 100000.00000 dove i 5 zeri dopo
il separatore decimale servono per forzare una conversione implicita.
========================
DECLARE @s CHAR(10)
SET @s = '0000521000'
SELECT CONVERT(DECIMAL(10, 0), @s)/100000.00000
========================
> Avete qualche suggerimento...se non chiedo troppo
>
> Grazie mille a tutti...
Ciao...
--
Luca Bianchi
Microsoft MVP - SQL Server
/* 1° batch */
declare @str varchar(10)
set @str='1001000115' ---=> 1001000.115 qta
declare @qta decimal(10,3)
set @qta=convert (int ,@str)/1000.000
print @qta
RISULTATO 1001000.115
poi per curiosità ( o forse perchè non capisco la funzione dei decimali
della cifra 1000.000) provo questo:
/* 2° batch */
declare @str varchar(10)
set @str='1001000115' ---=> 1 qta
declare @qta decimal(10,3)
set @qta=convert (int ,@str)/1000
print @qta
RISULTATO 1001000.000
poi riprovo ancora con questo e ....
/* 3° batch */
declare @str varchar(10)
set @str='1001000115' ---=> 1001000.115 qta
declare @qta decimal(10,3)
set @qta=convert (decimal(10,0) ,@str)/1000
print @qta
RISULTATO 1001000.115
NON ODIARMI NON MANDARMI A QUEL PAESE MA IO NON NE CAPISCO NULLA...
E SOPRATUTTO NON CAPISCO IN CHE COSA MANCO PER NON CAPIRE UNA COSA COSì
SEMPLICE....
SE MI DELUCIDI .... GRAZIE... ALTRIMETI GRAZIE ANCORA....
CIAO
SIMONE
*/
"Luca Bianchi" <rightjoinR...@hotmail.com> ha scritto nel messaggio
news:#vOX#ojFDH...@TK2MSFTNGP12.phx.gbl...
Nessun problema... ne l'uno ne l'altro... ;-)
> E SOPRATUTTO NON CAPISCO IN CHE COSA MANCO PER NON CAPIRE UNA COSA COSì
> SEMPLICE....
> SE MI DELUCIDI .... GRAZIE... ALTRIMETI GRAZIE ANCORA....
> CIAO
> SIMONE
La seconda soluzione che hai proposto è da scartare poichè come hai visto
arrotonda il valore all'unità e pertanto non soddisfa la tua richiesta.
Prendendo ad esempio quindi il prima oppure il terzo script sei ad un passo
dalla soluzione in quanto ti basta aggiungere i separatori di migliaia per
essere a posto. Personalmente, però, ritengo che questo sia un compito che
debba essere demandato all'applicazione client; il server dovrebbe limitarsi
a restituire i dati al client e quest'ultimo dovrebbe preoccuparsi della
presentazione all'utente in forma più gradevole.
Volendo far svolgere anche questa attività a SQL Server potrebbe essere
opportuno un passo indietro e semplificare la cosa. I tuoi script (1 e 3) da
un punto di vista del risultato vanno già bene così e manca solo la parte
finale che può essere risolta con una serie di funzioni nidificate. Poichè,
però, parti da una stringa di 10 caratteri (giusto?) di cui gli ultimi 3
rappresentano la parte decimale e i rimanenti la parte intera in cui devi
separare le cifre a 3 a 3, puoi scrivere
==========================
DECLARE @s VARCHAR(10),
@s2 VARCHAR(15)
SET @s = '1234567123'
SET @s2 = LEFT(@s, 1) + '.' +
SUBSTRING(@s, 2, 3) + '.' +
SUBSTRING(@s, 5, 3) + ',' +
RIGHT(@s, 3)
PRINT @s2
==========================
E' possibile includere un ulteriore passaggio per eliminare eventuali zeri
non significativi in testa alla stringa.
Per fare questo prima della istruzione PRINT puoi inserire il seguente
controllo
==========================
WHILE LEFT(@s2, 1) IN ('0', '.')
BEGIN
SET @s2 = SUBSTRING(@s2, 2, 15)
END
==========================