Creazione di stringa

mercoledì 28 gennaio 2009 - 07.14

perla0279 Profilo | Senior Member

ciao
devo creare una stringa che poi andrà esportata.

Ho quasi finito ma ho un problema dal quale faccio fatica ad andare avanti.... cioè sono proprio bloccata :-)

Ad un certo punto della stringa ho una somma
sum ( tot / 100)
devo portare questa somma con valore 123,60 all'interno della stringa in questo formato 0000012360
Quindi devo creare un numero che ha due decimali alla fine, la cifra intera del numero e poi il valore 0 fino ad arrivare a coprire la lunghezza del campo ( che è di 10 in totale).
Inoltre se converto la somma in char mi vengono anche una marea di spazzi vuoti alla fine....

Mi serve un aiuto

lbenaglia Profilo | Guru

>devo portare questa somma con valore 123,60 all'interno della
>stringa in questo formato 0000012360
>Quindi devo creare un numero che ha due decimali alla fine, la
>cifra intera del numero e poi il valore 0 fino ad arrivare a
>coprire la lunghezza del campo ( che è di 10 in totale).
>Inoltre se converto la somma in char mi vengono anche una marea
>di spazzi vuoti alla fine....
>
>Mi serve un aiuto

Ciao Elena,

Che DBMS utilizzi?

Ciao!

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

perla0279 Profilo | Senior Member

sql 2005.

lbenaglia Profilo | Guru

>sql 2005.

Potresti utilizzare una query simile a:

SELECT STUFF(RIGHT('0000000000' + CAST(123.60 AS varchar(11)), 10), 8, 1, '') AS StringValue; /* Output: StringValue ----------- 000012360 (1 row(s) affected) */

Come vedi non faccio altro che concatenare una stringa di 10 zeri al numero castato a stringa, recuperando i 10 caratteri a destra e sostituendo il punto (ottavo carattere) con una stringa nulla
Ad ogni modo questo genere di formattazioni dovrebbero essere eseguite lato client dal programma che sottomette la query...

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

perla0279 Profilo | Senior Member

non funziona........

La somma mi ritorna questo valore
5817.60000
890.00000
597.59900
685.00000
744.00000
866.00000
ho riportato degli esempi......................
io devo portarlo a questa stringa --> 00001059
dove 10 è l'intero e 59 è il decimale.

Ho provato a variare la query che mi hai postato per addatarla ma non ci sono riuscita ....... inoltre il campo deve essere sempre fisso......
ho dei campi simili rispettivamente di 8 , 6 e 10 caratteri.

lbenaglia Profilo | Guru

>non funziona........
>
>La somma mi ritorna questo valore
>5817.60000
>890.00000
>597.59900
>685.00000
>744.00000
>866.00000

Eh, scusa, prima hai scritto 123,60

>ho riportato degli esempi......................
>io devo portarlo a questa stringa --> 00001059
>dove 10 è l'intero e 59 è il decimale.
Lo sai che non ti seguo?
Nei valori che hai riportato non vedo un 10,59...

>
>Ho provato a variare la query che mi hai postato per addatarla
>ma non ci sono riuscita ....... inoltre il campo deve essere
>sempre fisso......
>ho dei campi simili rispettivamente di 8 , 6 e 10 caratteri.
Ma non erano di 10 caratteri?
Se non spieghi meglio il problema, non so come aiutarti.

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

perla0279 Profilo | Senior Member

>non funziona........
>
>La somma mi ritorna questo valore
>5817.60000
>890.00000
>597.59900
>685.00000
>744.00000
>866.00000

Eh, scusa, prima hai scritto 123,60
Allora provo a spiegarmi meglio con un esempio reale.... (prima ne ho postati alcuni ma dal momento che mi tornano diverse righe magari non sono stata attenta a prenderle gioste.

Stò costruendo una stringa con più campi,alcuni di questi campi sono rispettivamente delle somme.
Quindi ho 3 cambi da convertire in stringa che fanno rispettivamente delle somme di colonne, devo essere di 8 , 6 e 10 caratteri.
Havevo scritto 10 perche se trovavo la query giusta poi la adattavo io agli altri :-)

Poi la mi riporta quiei valori,
prendo due esempi:
5817.60000
890.00000

Devo convertire questo valore in char o varchar in questo modo,
per l'esempio di 8 caratteri

00581760
00089000
ecc...
in cui ho 0 per riempire il campo, 5817 il valore intero , 60 il campo di due decimali.

Spero di essere stata più ciara :-)



lbenaglia Profilo | Guru

>prendo due esempi:
>5817.60000
>890.00000
>
>Devo convertire questo valore in char o varchar in questo modo,
>per l'esempio di 8 caratteri
>
>00581760
>00089000
>ecc...
>in cui ho 0 per riempire il campo, 5817 il valore intero , 60
>il campo di due decimali.
Ecco qua:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

>Spero di essere stata più ciara :-)
Ciarissima

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

perla0279 Profilo | Senior Member

Grazie

senza questo aiutino non ci sarei mai riuscita :-) :-)


perla0279 Profilo | Senior Member

perla0279 Profilo | Senior Member

Mi manca ancora questo :-(

Non mi è riuscito.
Il campo è di 6


io ho scritto questo codice
case when sum(QTA_VENDITA*100) <>0 then STUFF(RIGHT('000000' + CAST(CAST(sum(IMP_VENDITA*100)/sum(QTA_VENDITA*100)*100 AS decimal(10,2)) AS varchar(11)), 7), 5, 1, '') else 0 end

i valori senza la codifica sono
298.000000
110.400000
99.000000
60.000000
177.600000


la query mi ritorna:
29800
11040
9900
6000
17760

come vedi ce ne sono senza lo 0 davanti .... dove ho sbagliato ??? oppure la query è troppo complessa ??

lbenaglia Profilo | Guru

>come vedi ce ne sono senza lo 0 davanti .... dove ho sbagliato
>??? oppure la query è troppo complessa ??

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

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

perla0279 Profilo | Senior Member

fuori dal case
cioè : STUFF(RIGHT('000000' + CAST(CAST(sum(IMP_VENDITA*100)/sum(QTA_VENDITA*100)*100 AS decimal(10,2)) AS varchar(11)), 7), 5, 1, '')
mi tornano effettivamente i valori giusti :-)

Ma all'interno del case ...... niente mi tornano sbagliati.
Non capisco perchè ??? Dovrebbe essere uguale.

case when sum(QTA_VENDITA*100) <>0 then STUFF(RIGHT('000000' + CAST(CAST(sum(IMP_VENDITA*100)/sum(QTA_VENDITA*100)*100 AS decimal(10,2)) AS varchar(11)), 7), 5, 1, '') else 0 end,

questo non mi ritorna coretto.....eppure è uguale alla tua ...........
Non so ma mi viene in mente che forse il passo 'sum(IMP_VENDITA*100)/sum(QTA_VENDITA*100)*100' è troppo complesso...........
è che sono costretta perchè mi serve proprio quel valore :-(

Comunque lanciandola mi torna :
25294
22250
19920
17125
14880
14433
23880
21500
29600
29800
11040
9900
6000
17760
16833

perla0279 Profilo | Senior Member

ho fatto....

ho riportato questo nel case

else '000000' end

lbenaglia Profilo | Guru

>Ma all'interno del case ...... niente mi tornano sbagliati.
>Non capisco perchè ??? Dovrebbe essere uguale.
Se non mi posti un esempio completo (CREATE TABLE, INSERT INTO, query e risultato desiderato) non potrò aiutarti.

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