Domanda:
SQL: Speigazione funzione NVL?
?
2013-10-17 02:24:13 UTC
Ciao, gentilmente, chi sa spiegarmi questa funzione:
NVL(TO_DATE(DATA_DISATT,'DD-MON-YY'),TRUNC(ADD_MONTHS(SYSDATE,-1),'MM')) >= TRUNC(ADD_MONTHS(SYSDATE,-1),'MM')

specialmente il motivo della condizione >=

grazi3
Tre risposte:
Tigrotto
2013-10-17 15:43:03 UTC
Osserva il testo della domanda, cosa c'era scritto al posto dei 'puntini' ?

Puoi aggiungerlo usando i "Dettagli descrittivi" della domanda ?



-- - - -- - -- -- -- -- -

Bene. Secondo me, manca ancora una parentesi ma, cercando di "indovinare" (ma neanche tanto), dovremmo esserci. Eccola qua per intero (chissà perché la mia non viene ridotta):



NVL(TO_DATE(DATA_DISATT, 'DD-MON-YY'), TRUNC(ADD_MONTHS(SYSDATE, -1), 'MM')) >= TRUNC(ADD_MONTHS(SYSDATE, -1), 'MM')



Sinceramente è una condizione troppo lunga e non va bene scrivere del codice così complesso: è assolutamente impossibile da mantenere. Semplificalo ad ogni costo. Comunque vediamo cosa si può tirare fuori.



Concentriamoci sulla funzione NLV e sulla condizione. La forma base è questa



NVL(, ) >=



e non c'è altro. La funzione NVL ci dice che se è valorizzata allora il termine considerato è proprio altrimenti (se non è valorizzata) il termine considerato è .



Dunque, in sintesi:



1) se è valorizzata allora la condizione valutata è " è maggiore o uguale a "

2) se non è valorizzata allora la condizione " è maggiore o uguale a " è sempre vera



che esplicita questa implicazione logica ( http://it.wikipedia.org/wiki/Implicazione_logica )



se ( non nulla) implica che ( >= )



Questo è tutto per quanto riguarda il NVL che se non erro è l'unica domanda che poni.



Ah, sì, il motivo della condizione ">=": è una condizione che appartiene alla logica del problema che cerchi di risolvere. Chi può dirti, meglio di te, a cosa serve ?



Se hai bisogno di una spiegazione più ampia devi trasmettermi un po' di codice in modo da permettermi di capire meglio il contesto. Senza annoiare su Y!A usa la mia mail (nel profilo) per proseguire.



Non mi è chiaro se le forme tecniche con cui sono espresse e ti siano chiare. Eventualmente usa ancora i "Dettagli aggiuntivi".
Tizio 008
2013-10-18 23:47:07 UTC
prende una data dalla colonna data_disatt espressa come DD-MON-YY, p.es. 25-ott-13; se la data di disattivazione è nulla, considera "ora" (sysdate), un mese fa, "arrotondato" al mese; per esempio, se oggi è 19 ottobre, un mese fa era 19 settembre, il trunc ci porta all'inizio del mese, cioè 1 settembre.



l'espressione, nel caso il campo data_disatt sia null, è certamente vera, mentre se la data_disatt è valorizzata, sarà vera solo se la data lì contenuta è oltre il primo del mese precedente.



p.es. se c'è scritto 25-ott-13, allora abbiamo che questa è sicuramente maggiore del 1 settembre, e quindi la condizione è vera. se per dire fosse 25 settembre, sarebbe ancora vera, se fosse 30 agosto, sarebbe falsa.



il vero senso di ciò è naturalmente nel dove questa espressoine è usata.
?
2013-10-17 10:50:05 UTC
Spero che la fonte che ti indico ti sia utile.


Questo contenuto è stato originariamente pubblicato su Y! Answers, un sito di domande e risposte chiuso nel 2021.
Loading...