[SQL SERVER 2005]Convertire stringain int

martedì 28 dicembre 2010 - 18.05
Tag Elenco Tags  SQL Server 2005

symonx80 Profilo | Junior Member

Ciao come posso convertire una stringa del tipo 13,00 in un int?
Ho provato con cast('13,00' as int) ma mi da errore.
Qualcuno può aiutarmi?
Grazie

lbenaglia Profilo | Guru

>Ciao come posso convertire una stringa del tipo 13,00 in un int?
>Ho provato con cast('13,00' as int) ma mi da errore.
>Qualcuno può aiutarmi?

Ciao,

Il separatore decimale è sempre il punto "." a prescindere dalla lingua associata alla login o dalle regional settings del PC client.
Per convertire quella stringa in intero devi prima convertire la virgola in punto, poi convertire la stringa in un valore decimale ed infine convertire il tutto ad intero:

SELECT CAST(CAST(REPLACE('13,00', ',', '.') AS decimal(2,0)) AS int) AS Intero; /* Output: Intero ----------- 13 (1 row(s) affected) */

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

symonx80 Profilo | Junior Member

Ho provato e funziona ma per alcuni valori mi va in errore.
Io devo convertire tutti valori che trovo in una determinata colonna ed essi possono essere vuoti o avere la forma 123..n,xx
Eseguendo la query da te suggerita mi appare l'errore "Error converting data type nvarchar to numeric."
Dovrebbe dipendere dal fatto che alcuni campi sono valorizzati '' e non null..

dompa72 Profilo | Senior Member

>Ho provato e funziona ma per alcuni valori mi va in errore.
>Io devo convertire tutti valori che trovo in una determinata
>colonna ed essi possono essere vuoti o avere la forma 123..n,xx
>Eseguendo la query da te suggerita mi appare l'errore "Error
>converting data type nvarchar to numeric."
>Dovrebbe dipendere dal fatto che alcuni campi sono valorizzati
>'' e non null..

io farei
SELECT CASE NomeCampo when Null then Cast('0' as bigint) else CAST(CAST(REPLACE('13,00', ',', '.') AS decimal(2,0)) AS bigint) end AS InteroLungo

Ho cambiato il tipo di data da INT a Bigint perché hai inserito questo valore 123..n,xx.

Spero che sia corretto

lbenaglia Profilo | Guru

>Ho provato e funziona ma per alcuni valori mi va in errore.
>Io devo convertire tutti valori che trovo in una determinata
>colonna ed essi possono essere vuoti o avere la forma 123..n,xx
>Eseguendo la query da te suggerita mi appare l'errore "Error
>converting data type nvarchar to numeric."
>Dovrebbe dipendere dal fatto che alcuni campi sono valorizzati
>'' e non null..
Questo puoi verificarlo con una banale query:

DECLARE @t TABLE( Col varchar(5) ); INSERT @t VALUES (NULL), (''), ('13,45'); SELECT CASE WHEN Col = '' OR Col IS NULL THEN 0 ELSE CAST(CAST(REPLACE(Col, ',', '.') AS decimal(2,0)) AS int) END AS Intero FROM @t; /* Output: Intero ----------- 0 0 13 (3 row(s) affected) */

Una ulteriore causa di errore può essere dovuta al fatto che la stringa potrebbe contenere un valore numerico con più di 2 cifre per la parte intera, pertanto dovrai dimensionare opportunamente lo scale del cast a decimal.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5