Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

CAST da nvarchar a int

94 views
Skip to first unread message

--- PINKU ---

unread,
Apr 17, 2003, 8:40:43 AM4/17/03
to
Ciao a tutti,
non risco a fare il CAST per la conversione esplicita da nvarchar a int,
dalla guida risulta che tale conversione dovrebbe essere implicita ma in
realtà non è così, o almeno nel mio caso non funzica.

Io ho una tabella in cui ho un campo int ed un campo nvarchar (che contiente
comunque numeri), dovrei moltiplicarli.

Come fare?


Luca Bianchi

unread,
Apr 17, 2003, 9:13:40 AM4/17/03
to
Ho creato una tabella con un campo di tipo INT e un campo di tipo VARCHAR

CREATE TABLE Test
(
Num INT NOT NULL,
Chr VARCHAR(5) NOT NULL
)

ho inserito dei record di prova

INSERT Test VALUES (1, '1')
INSERT Test VALUES (2, '2')
INSERT Test VALUES (3, '3')
INSERT Test VALUES (4, '4')

ed ho eseguito l'istruzione che segue

SELECT Num, Chr, Num * Chr
FROM Test

Ottengo regolarmente il risultato desiderato...

Ciao...

--
Luca Bianchi
Microsoft MVP - SQL Server


--- PINKU ---

unread,
Apr 17, 2003, 10:31:27 AM4/17/03
to
"Luca Bianchi" <rightjoinR...@hotmail.com> ha scritto nel messaggio
news:ObYyoLO...@TK2MSFTNGP12.phx.gbl...

OK per quanto riguarda valorin INTEGER, ma io ho dei valori con decimali,
come faccio?


Luca Bianchi

unread,
Apr 17, 2003, 10:43:31 AM4/17/03
to
"--- PINKU ---" <nob...@nowhere.xxx> wrote in message
news:uj8wO5OB...@TK2MSFTNGP11.phx.gbl...

>
> OK per quanto riguarda valorin INTEGER, ma io ho dei valori con decimali,
> come faccio?
>

...anche modificando il campo INT in DECIMAL il risultato non cambia...

=========================
CREATE TABLE Test
(
Num DECIMAL(5, 2) NOT NULL,
Chr NVARCHAR(5) NOT NULL
)

INSERT Test VALUES (1.2, N'1.2')
INSERT Test VALUES (2.0, N'2.0')
INSERT Test VALUES (3.9, N'3.9')
INSERT Test VALUES (4.5, N'4.5')

SELECT Num, Chr, Num * Chr
FROM Test

=========================

Lorenzo Benaglia

unread,
Apr 17, 2003, 10:53:19 AM4/17/03
to
--- PINKU --- wrote:
> OK per quanto riguarda valorin INTEGER, ma io ho dei valori con
> decimali, come faccio?

Ciao PINKU,

Nell'esempio che ti ha proposto Luca se la colonna nvarchar contiene valori
non interi, devi effettuare una conversione esplicita della colonna int in
un datatype in grado di gestire numeri decimali (ad esempio numeric o
decimal), altrimenti riceverai l'errore:

Server: Msg 245, Level 16, State 1, Line 1
Syntax error converting the nvarchar value '1.2' to a column of data type
int.

Esempio:

USE tempdb
GO

CREATE TABLE dbo.Test(
Num int NOT NULL,
Chr nvarchar (5) NOT NULL
)
GO

INSERT Test VALUES (1, '1.2')
INSERT Test VALUES (2, '2.26')
INSERT Test VALUES (3, '3.99')
INSERT Test VALUES (4, '.5')
GO

SELECT Num, Chr, CAST(Num AS Numeric(3,2)) * Chr Prodotto
FROM dbo.Test
GO

/* Output:

Num Chr Prodotto
----------- ----- ---------
1 1.2 1.2000
2 2.26 4.5200
3 3.99 11.9700
4 .5 2.0000

(4 row(s) affected)

*/

DROP TABLE dbo.Test

Ciao!

--
Lorenzo Benaglia


Microsoft MVP - SQL Server

UGIdotNET - http://www.ugidotnet.org
UGISS - http://www.ugiss.org


--- PINKU ---

unread,
Apr 17, 2003, 11:34:27 AM4/17/03
to

"Lorenzo Benaglia" <lbenagl...@tin.it> ha scritto nel messaggio
news:ezFdXEPB...@TK2MSFTNGP11.phx.gbl...

>
> Ciao PINKU,
>
> Nell'esempio che ti ha proposto Luca se la colonna nvarchar contiene
valori
> non interi, devi effettuare una conversione esplicita della colonna int in
> un datatype in grado di gestire numeri decimali (ad esempio numeric o
> decimal), altrimenti riceverai l'errore:
>
> Server: Msg 245, Level 16, State 1, Line 1
> Syntax error converting the nvarchar value '1.2' to a column of data type
> int.
>
Grazie a tutti e due per le risposte, purtroppo le prove che mi avete
indicato le avevo già fatte tutte,
il problema è che in quel maledetto campo i valori sono a volte allineati a
sinistra, a volte a destra, a volte hanno il punto, a volte la virgola,
insomma una schifezza.....

Ho comunque risolto costruendomi il valore pulito a furia di TRIM, PATINDEX,
SUBSTRING etc.....

Che sudata, comunque grazie.

Lorenzo Benaglia

unread,
Apr 17, 2003, 12:07:44 PM4/17/03
to
--- PINKU --- wrote:
> Grazie a tutti e due per le risposte, purtroppo le prove che mi avete
> indicato le avevo già fatte tutte,
> il problema è che in quel maledetto campo i valori sono a volte
> allineati a sinistra, a volte a destra, a volte hanno il punto, a
> volte la virgola, insomma una schifezza.....
>
> Ho comunque risolto costruendomi il valore pulito a furia di TRIM,
> PATINDEX, SUBSTRING etc.....
>
> Che sudata, comunque grazie.

Ciao Pinku,

perdonami, ma non ti conviene razionalizzare i dati con una serie di UPDATE?
Che senso ha una colonna contenente informazioni "eterogenee"?

--- PINKU ---

unread,
Apr 18, 2003, 2:28:07 AM4/18/03
to
"Lorenzo Benaglia" <lbenagl...@tin.it> ha scritto nel messaggio
news:b7mjgg$2g7qk$1...@ID-154627.news.dfncis.de...

>
> Ciao Pinku,
>
> perdonami, ma non ti conviene razionalizzare i dati con una serie di
UPDATE?
> Che senso ha una colonna contenente informazioni "eterogenee"?
>
E' solo un importazione da una base dati di un altro programma, ovviamente
nella mia tabella di SQL server di dati sono normalizzati e in formato
corretto.

Grazie e ciao.


0 new messages