Tobi: mysql + Tage zählen

Hi,

mach ich etwas falsch? Weil ich grade eben 2-3 unsinnige Ergebnisse erhalten habe?

  
SELECT  
CASE  
WHEN (re.nixmehroffen = 1 ) THEN 'A'  
WHEN (re.rueckgaengiggemacht= 1 ) THEN 'A'  
WHEN (re.gedruckt = 0) THEN 'A'  
ELSE  
curdate() - ADDDATE(re.datum , INTERVAL re.faellig DAY)  
END  
FROM ...  

soll entweder einen A-String oder die Tage seit der Fälligkeit ergeben.

Tobi

  1. Moin,

    SELECT
    CASE
    WHEN (re.nixmehroffen = 1 ) THEN 'A'
    WHEN (re.rueckgaengiggemacht= 1 ) THEN 'A'
    WHEN (re.gedruckt = 0) THEN 'A'
    ELSE
    curdate() - ADDDATE(re.datum , INTERVAL re.faellig DAY)
    END
    FROM ...

      
    Es gibt bei MySQL die Funktion DATEDIFF() :  
      
    `SELECT DATEDIFF(curdate(), ADDDATE(re.datum, INTERVAL re.faellig DAY))`{:.language-sql}  
      
    Das liegt IMHO daran, dass MySQL das Datumsformat 'YYYY-MM-DD' nicht addieren oder subtrahieren kann. Es versucht daher so wie ich das sehe, beides nach INT zu casten...  
      
    Grüße Marco
    
    -- 
    Ich spreche Spaghetticode - fließend.
    
    1. Es gibt bei MySQL die Funktion DATEDIFF() :

      SELECT DATEDIFF(curdate(), ADDDATE(re.datum, INTERVAL re.faellig DAY))

      Das liegt IMHO daran, dass MySQL das Datumsformat 'YYYY-MM-DD' nicht addieren oder subtrahieren kann. Es versucht daher so wie ich das sehe, beides nach INT zu casten...

      Hi Marco,

      ja. Mit DATEDIFF läufts vorzüglich. Danke.

      Tobi

  2. Tach!

    mach ich etwas falsch? Weil ich grade eben 2-3 unsinnige Ergebnisse erhalten habe?

    Ich kann nichts entdecken. Mir fehlen zum Nachvollziehen aber auch Beispieldaten und eine Aussage zum Feldtyp von re.datum und re.faellig.

    dedlfix.

    1. Tach!

      Ich kann nichts entdecken.

      Siehe misterunknowns Antwort. Ich hab in dem Fall MySQL zu viel Intelligenz zugetraut. Ein Test mit

      SELECT CURDATE() - ADDDATE('2013-07-25', INTERVAL 1 DAY)  
      
      

      brachte das erwartete Ergebnis. Aber nun nochmal mit einen Monat vorher probiert, ergab 103 Tage, mit DATEDIFF() jedoch 33.

      dedlfix.