Conversione DA text A money in Query SQL

mercoledì 21 giugno 2006 - 15.43

paolomanfrin Profilo | Newbie

Salve a tutti...

Ho un DB in SQL Server in cui c'è un' attributo "Bilancio" di tipo text con contenuti dati tipo il seguente: 148.667,31

Ho la necessità di eseguire una Query e convertire tale tipo text in tipo money...

Ho provato con CAST ma non funziona... ergo sbaglio...

La Select che ho usato è la seguente:

SELECT [No.],[Nome],CAST([Bilancio] AS money)
FROM Dati_Clienti

Grazie a tutti.
Paolo

alx_81 Profilo | Guru

Ciao..
la domanda che mi sorge spontanea è.. perchè non hai usato un money subito???? =)
Alx81 =)

http://blogs.dotnethell.it/suxstellino

lbenaglia Profilo | Guru

>Ho un DB in SQL Server in cui c'è un' attributo "Bilancio" di
>tipo text con contenuti dati tipo il seguente: 148.667,31

Ciao Paolo,

come mai un data type pensato per memorizzare stringhe fino a 2 GB è stato utilizzato per memorizzare importi?

>Ho la necessità di eseguire una Query e convertire tale tipo
>text in tipo money...

Non puoi:

Msg 529, Level 16, State 2, Line 2 Explicit conversion from data type text to money is not allowed.

>Ho provato con CAST ma non funziona... ergo sbaglio...

Non sbagli tu, ha sbagliato chi ha utilizzato il data type Text per memorizzare importi

Inoltre la stringa "148.667,31" non può essere convertita correttamente a money dato che il separatore decimale è il punto e quello delle migliaia è la virgola indipendentemente dalle regional options o dalla lingua di default associata alla login, pena GRAVISSIMI errori logici.

Verifica:

SELECT CAST('148.667,31' AS money) AS Valore GO /* Output: Valore --------------------- 148,6673 (1 row(s) affected) */

>Grazie a tutti.
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

paolomanfrin Profilo | Newbie

Eh lo sapevo....
Pultroppo sono dati estratti da Navision e memorizzati su DB.

Per diversi motivi è stato deciso di estrapolare tutto in formato testo e poi ognuno fa le conversioni di cui ha bisogno...

Per quel che mi riguarda devo leggere da SQL server tali dati cpn una query sql per poi manipolarla all'interno del servizio reporting di Sql Server...

Se qualcuno mi aiuta mi farebbe un grosso favore....

Paolo

alx_81 Profilo | Guru

ok.. ma è necessario che il formato sia proprio text? allora, piuttosto è meglio un semplice varchar..o forse ignoro qualcosa.. =)
Alx81 =)

http://blogs.dotnethell.it/suxstellino

lbenaglia Profilo | Guru

>Per diversi motivi è stato deciso di estrapolare tutto in formato
>testo e poi ognuno fa le conversioni di cui ha bisogno...

La scelta di estrapolare gli importi come stringhe, per di più utilizzando il data type Text ed il formato italiano per quanto concerne i separatori ritengo che sia la scelta più infelice che potevate fare

>Se qualcuno mi aiuta mi farebbe un grosso favore....
Se non cambi modo di estrazione dubito che andrai lontano...

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

paolomanfrin Profilo | Newbie

Grazie della risposta...

Eh lo so... spesso quando prendo in mano roba fatta da altri mi vien da piangere....

Stavo guardando quì: http://msdn2.microsoft.com/it-it/library/ms187928.aspx

Non è possibile neanche con CONVERT?

Ciao e Grazie,
Paolo

lbenaglia Profilo | Guru

>Non è possibile neanche con CONVERT?

Un cast è un cast indipendentemente dal modo in cui lo fai (implicito o esplicito mediante CAST o CONVERT).
Quindi la risposta è no.

>Ciao e Grazie,
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

paolomanfrin Profilo | Newbie

Ho Risolto!!!

SELECT cast ( replace ( replace ( cast ( Bilancio as varchar ),'.',''),',','.' ) as money ) As Bilancio

from Dati_Clienti

funziona perfettamente... Nessun errore di conversione!

Grazie a tutti... e anche a me!

Ciao,

Paolo

Con questa query partendo da 3.868,7 ( text ) arrivo a 3868,70 ( money ).
Fantastico!

lbenaglia Profilo | Guru

>Ho Risolto!!!
>
>SELECT cast ( replace ( replace ( cast ( Bilancio as varchar
>),'.',''),',','.' ) as money ) As Bilancio
>
> from Dati_Clienti
>
>funziona perfettamente... Nessun errore di conversione!

Complimenti, ma che roba brutta

>Grazie a tutti... e anche a me!
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5