PostGree Cambiare il Campo

lunedì 04 febbraio 2008 - 14.58

Anonimo Profilo | Senior Member

Ragazzi lo so che forse questo non è la sessione di forum piu' adatta per postare il mio problema ma non conosco altri forum dove trattano i database e' precisamente PostGreeSQL

Allora siccome devo poter modificare un campo in un database PostGreeSQL, per modifica intendo tramite una query che mi dia la possibilità di trasformare un campo di tipo text in un campo di tipo REAL girovagando sulla guida ho trovato il comando ALTER TABLE che precisamente dovrebbe essere utilizzato in questo modo:


ALTER TABLE gestionale.prodotti ALTER COLUMN prezzovendita TYPE real;


gestionale.prodotti che è la tabella campo prezzovendita tipo REAL;

se fosse stato un database MySQL il risultato della query sarebbe:

ALTER TABLE prodotti MODIFY COLUMN `prezzovendita` INT;

vorrei sapere se qualcuno mi sa dire equivalente in PostGree, cordiali saluti il vostro amico

lbenaglia Profilo | Guru

>...trasformare un campo di tipo text in un campo
>di tipo REAL girovagando sulla guida ho trovato il comando ALTER
>TABLE che precisamente dovrebbe essere utilizzato in questo modo:
>
>
>ALTER TABLE gestionale.prodotti ALTER COLUMN prezzovendita TYPE
>real;

Ciao,

Non conosco PostgreSQL ma sfogliando la documentazione il comando che hai postato sembra corretto.
L'hai provato?
Ovviamente la modifica verrà effettuata con successo solo se tutti i valori della colonna prezzovendita saranno implicitamente castabili a real.
Tra l'altro, per quale motivo utilizzi un data type approssimato come real per memorizzare degli importi?
Non sarebbe il caso di ricorrere ad un data type a precisione fissa come Decimal o Numeric?
http://www.postgresql.org/docs/8.3/static/datatype-numeric.html

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

Anonimo Profilo | Senior Member

ho provato anche con :

ALTER TABLE gestionale.prodotti ALTER COLUMN prezzovendita TYPE integer;

ma mi ritorna questo errore quando eseguo la query:

ERROR: column "prezzovendita" cannot be cast to type "pg_catalog.int4"
Stato SQL: 42804


ciao è grazie ancora per la risposta..

lbenaglia Profilo | Guru

>ho provato anche con :
>
>ALTER TABLE gestionale.prodotti ALTER COLUMN prezzovendita TYPE
>integer;
>
>ma mi ritorna questo errore quando eseguo la query:
>
>ERROR: column "prezzovendita" cannot be cast to type "pg_catalog.int4"
>Stato SQL: 42804

Appunto, che ho scritto sopra?
Te lo riporto: "Ovviamente la modifica verrà effettuata con successo solo se tutti i valori della colonna prezzovendita saranno implicitamente castabili a real"

L'errore sta ad indicare che ci sono dei valori della colonna "prezzovendita" che non possono essere castati implicitamente a integer (fuori range di validità, stringhe, ecc.).

Se vuoi castare i dati come prima cosa "depurali" in modo tale che possano essere convertiti in base al data type di destinazione (se sono importi utilizza decimal con uno scale = 2 per i decimali).

>ciao è grazie ancora per la risposta..
Prego.

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

Anonimo Profilo | Senior Member

Allora nel campo prezzodivendita di tipo text c'e' il valore: 3.72 se io lancio:

ALTER TABLE gestionale.prodotti ALTER COLUMN prezzovendita TYPE decimal;

mi ridà il seguente errore:


ERROR: column "prezzovendita" cannot be cast to type "pg_catalog.numeric"
Stato SQL: 42804


vorrei sapere come posso convertire sti dati in modo da non perdere importi, cordiali saluti

lbenaglia Profilo | Guru

>Allora nel campo prezzodivendita di tipo text c'e' il valore:
>3.72 se io lancio:
>
>ALTER TABLE gestionale.prodotti ALTER COLUMN prezzovendita TYPE
>decimal;
>
>mi ridà il seguente errore:
>
>
>ERROR: column "prezzovendita" cannot be cast to type "pg_catalog.numeric"
>Stato SQL: 42804
Hai solo una riga con prezzodivendita valorizzato a 3.72?

In questo caso sarebbe sufficiente una:

ALTER TABLE gestionale.prodotti ALTER COLUMN prezzovendita TYPE decimal(3,2);

Ovvero, 1 cifra intera seguita da 2 cifre decimali. Il punto "." viene interpretato come separatore decimale.

Se hai più righe, l'errore può essere generato da alcuni valori che non sono numerici (ad esempio spazi o altri tipi di caratteri).

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

Anonimo Profilo | Senior Member

Ciao, mille grazie ancora per la risposta ho applicato la tua query:

ALTER TABLE gestionale.prodotti
ALTER COLUMN prezzovendita TYPE decimal(3,2);

ma mi da ancora il seguente errore:

ERROR: column "prezzovendita" cannot be cast to type "pg_catalog.numeric"
Stato SQL: 42804
-
Sai il problema e' che non voglio sbagliare e' far sballare i valori. Cordiali Saluti è Mille grazie.

lbenaglia Profilo | Guru

>Ciao, mille grazie ancora per la risposta ho applicato la tua
>query:
>
>ALTER TABLE gestionale.prodotti
>ALTER COLUMN prezzovendita TYPE decimal(3,2);
>
>ma mi da ancora il seguente errore:
>
>ERROR: column "prezzovendita" cannot be cast to type "pg_catalog.numeric"
>Stato SQL: 42804

Ti rifaccio la domanda, ma questa volta prova a rispondere
Hai solo una riga con prezzodivendita valorizzato a 3.72?

>Sai il problema e' che non voglio sbagliare e' far sballare i
>valori.
Perché parli al plurale? Allora hai più righe in quella tabella, eh?
Come ti ho ripetuto più volte, probabilmente esiste almeno 1 occorrenza di quella colonna che non è numerica...

In SQL Server esiste la funzione ISNUMERIC() per verificare se una espressione sia numerica o meno, vediamo PostgreSQL cosa offre...
Boh, ho trovato questa funzione anche se mi sembra un po' un accrocchio:
http://www.thescripts.com/forum/thread174228.html

Qui ne trovi una simile:
http://www.webservertalk.com/archive143-2004-5-206410.html


>Cordiali Saluti è Mille grazie.
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5