Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    MySql: Funzione period_diff

    Ciao a tutti,

    dovrei usare il risultato della funzione period_diff, all'interno di una istruzione IF, per verificare se la differenza tra due date è positiva o negativa.

    Ho controllato la chiamata della funzione period_diff e mi restituisce correttemente un valore negativo o positivo. Però quando vado a fare questa istruzione: IF(PERIOD_DIFF(DATA1,DATA2)<0,'VERO','FALSO') mi viene restituito sempre FALSO, anche se metto >0.

    Qualcuno sa spiegarmi come mai e come risolvere

    Grazie
    _________________________
    Visita www.tifinanzia.com

  2. #2
    period_diff() rende la differenza IN MESI tra due date.

    se non e' maggiore o minore potrebbe (e sicuramente lo sara') uguale.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    No, ti assicuro che le date non sono uguali.

    Infatti ho fatto la differenza tra la data di oggi e quella di diversi anni fa e la differenza da 48 mesi.

    Post la query che vorrei usare. Il primo IFNULL l'ho usato per ritornare 0 nel caso un cui la data nel database(nel formato AAAA-MM-GG) non fosse valorizzata.

    IFNULL( IF(PERIOD_DIFF(CONCAT(SUBSTRING(CAST(DATE(NOW()) As CHAR(7)),1,4),SUBSTRING(CAST(DATE(NOW()) As CHAR(7)),6,7)),CONCAT(SUBSTRING(CAST(DATE(`data`) As CHAR(7)),1,4),SUBSTRING(CAST(DATE(`data`) As CHAR(7)),6,7)))<=0) ,'VERO' ,'FALSO')),0)
    _________________________
    Visita www.tifinanzia.com

  4. #4
    capperi che complicanza questa query. Potresti usare CASE, sempre che non ti sembre troppo semplice.

    es.

    codice:
    SELECT
    case
    when 
        (date_format(curdate(), '%Y%m') - date_format(data, '%Y%m')) 
        =  date_format(curdate(), '%Y%m')
        then 0
    when
        period_diff(date_format(curdate(), '%Y%m'),  date_format(data, '%Y%m')) 
        > 0
        then 'TRUE'
    else 'FALSE'
    end as delta
    FROM tabella

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Ti ringrazio!

    La semplicità è tutto ! La mia query, anche se un po' complicata, faceva il suo dovere; il fatto è che non capivo perchè il risultato di period_diff non veniva validato dall'IF.

    In ogni caso userò sicuramente il tuo suggerimento, anche perchè è più semplice farci manutenzione!!!

    Thanks
    _________________________
    Visita www.tifinanzia.com

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.