Sostituire valore nullo con stringa vuota

lunedì 15 dicembre 2008 - 15.05

LuxSkyWalker Profilo | Junior Member

Ciao a tutti...
Sono un programmatore junior e quindi ai più la mia domanda potrà sembrare banale, ma ci sto impazzendo un po' troppo nonostante abbia vicino a me il mio bel manuale di sql!!!

Allora...

All'interno di una vista, ho la seguente select:
select superficie,
canone,
case when (superficie <> 0) then (Canone /12 / superficie)
else 0 end as CanoneMensileMq
from tabella

E fino a qui nessun problema...ora mi è stato richiesto di mettere in CanoneMensileMq il valore stringa vuota("") se la divisione risolta impossibile (quando si ha superficie == 0).

Se io al posto dello 0, metto "" mi va in errore riportandomi il seguente messaggio:

--> Error converting data type varchar to numeric <--

Tenendo presente che superficie e canone sono DECIMAL, come posso scrivere la select in modo giusto?

Grazie a chiunque mi aiuterà!

LuxSkyWalker
Junior Developer .NET

Jeremy Profilo | Guru

Prova con gli apici ...non le virgolette

lbenaglia Profilo | Guru

>All'interno di una vista, ho la seguente select:
>select superficie,
> canone,
>case when (superficie <> 0) then (Canone /12 / superficie)
> else 0 end as CanoneMensileMq
>from tabella
>
>E fino a qui nessun problema...ora mi è stato richiesto di mettere
>in CanoneMensileMq il valore stringa vuota("") se la divisione
>risolta impossibile (quando si ha superficie == 0).
>
>Se io al posto dello 0, metto "" mi va in errore riportandomi
>il seguente messaggio:
>
>--> Error converting data type varchar to numeric <--
>
>Tenendo presente che superficie e canone sono DECIMAL, come posso
>scrivere la select in modo giusto?

Ciao Gianluca,

L'errore che ottieni è corretto, in quanto il risultato di quella funzione CASE è un decimal mentre la stringa nulla non lo è
Casomai l'errore lo compie chi ti ha detto di restituire in un caso un numero e nell'altro una stringa.

Una soluzione "sporca" consiste nel restituire in ogni caso una stringa castando il risultato della divisione a varchar, ma devi valutare se lato client ha senso una cosa del genere.

SELECT superficie , canone , CASE WHEN superficie <> 0 THEN CAST(Canone/12/superficie AS varchar(10)) ELSE '' END AS CanoneMensileMq FROM tabella;

Ho castato il risultato in una stringa a lunghezza variabile di 10 caratteri. Modifica opportunamente tale valore in base al risultato desiderato.

>Grazie a chiunque mi aiuterà!
Prego.

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

LuxSkyWalker Profilo | Junior Member

Perfetto...grazie mille!!!
LuxSkyWalker
Junior Developer .NET
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