Newsgroup: it.comp.software.database
Titolo: VARCHAR full spaces.

Volevo sapere se e` possibile modificare il comportamento dei VARCHAR in 
DB2.
Mi spiego meglio, se ho un VARCHAR(10) e il campo contiene 'xyz' la 
SELECT mi ritorna 'xyz', e voi direte:E cosa ti aspettavi? :-D
Si ma io vorrei che mi ritornasse 'xyz       ', cioe l'informazione 
completa di spazi sino a saturare la sua dimensione.
Grazie in anticipo.
Magellano


   Se e` un varchar questo non puo` mai accadere. La definizione del 
dominio, infatti, e`, piu` o meno, "una stringa di caratteri lunga al 
piu` 10".
-- 
Alla prossima,
Marco

 DB2.
Probabilmente ti faccio una domanda "sciocca": non puoi semplicemente
modificare il datatype del campo in CHAR(10)?
Ciao!
--
Lorenzo Benaglia
UGIdotNET - 
http://www.ugidotnet.org
UGISS - 
http://www.ugiss.org

 modificare il datatype del campo in CHAR(10)?
Purtroppo no!Il VARCHAR(10) era solo un'esempio in realtà i campi sono 
di dimensioni maggiori, pertanto mi e impossibile usare i CHAR.
Purtroppo non mi e nemmeno possibile modificare il datatype dei campi.Ho 
le mani legate e mi dovrò inventare qualcosa d'altro.
Le domande non sono mai "sciocche", ma lo possono essere le risposte. ;-)
Grazie, Magellano

 piu` 10".
Speravo magari che l'IBM potesse aver implementato in modo diverso il 
VARCHAR come ho visto fare in altri DB. :-(
Grazie.
Magellano


   Non sono un grande esperto di DB2 ma potrei suggerirti di considerare 
qualche funzione (o combinazione di funzioni) sui domini char e varchar 
che operino il "filling" di cui hai bisogno, tipo la rpad() di MySQL.
-- 
Alla prossima,
Marco

 che operino il "filling" di cui hai bisogno, tipo la rpad() di MySQL.
L'idea non e male daro un'occhiata.L'rpad() di MySQL non la conosco!
In termini di di prestazioni potrebbe cambiare qualcosa?
Magellano.


   rpad() aggiunge alla "destra" di una stringa un certo numero di 
caratteri specificati in modo da far raggiungere alla stringa stessa la 
lunghezza desiderata. Se tu usassi MySQL, il tuo problema sarebbe 
risolto... Problemi prestazionali non ne vedo tantissimi: comunque 
sarebbe una funzione scalare, nulla a che fare con relazioni, indici ed 
altre cose "pesanti".
-- 
Alla prossima,
Marco

A te serve un char.
Nessun DB (e intendo davvero nessuno) utilizza un varchar nel modo che
vorresti.
Puoi usare delle funzioni per paddare la stringa con spazi fino a raggiungere
una dimensione di 10 caratteri.
Saluti,
ender

 una dimensione di 10 caratteri.
Come creare una funzione OK!Ma come posso legarla a tutti i VARCHAR del 
mio DB?Hai un esempio?Oppure un LINK. ;-)
Ciao e grazie 1.000
Magellano

 mio DB?Hai un esempio?Oppure un LINK. ;-)
Ormai credo che tu possa seguire solo due strade.
La prima consiste nel prendere i contenuti di ciascuna tabella, copiarli in
una temporanea (insert into tabella1 select * from tabella) e poi ricrearla
con campi CHAR anzichè VARCHAR; al termine del tutto ributtare nella tabella
ricreata i dati contenuti nella temporanea.
La seconda soluzione, di creare delle view che restituiscano le tabelle
esattamente come sono, sostituendo tutti i campi varchar con la funzione
rpad() che - ho verificato - esiste anche su DB2. Quindi:
create view wtabella as
select ..., rpad(campo_varchar, 10, ' ') as campo_char, ...
from tabella;
dove, per rpad, i tre argomenti sono l'origine del testo, la lunghezza finale
che devi ottenere e il carattere di riempimento da utilizzare (uno spazio).
Spero di esserti stato utile.
Ender

SELECT mi ritorna 'xyz', e voi direte:E cosa ti aspettavi? :-D
Qualcosa tipo
SELECT left ("          " & tuocampo, 10) FROM tuatab
puo' andare?
Saluti.
Luciano