Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

SQL Abfrage für Einträge vor zwei Tagen

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von dengg, 2 August 2012.

  1. dengg

    dengg Benutzer

    Hallo
    Kann mir jemand sagen, wie ich eine SQL Abfrage mache, die nur Ergenisse liefert, die nicht älter als zwei Tage sind.
    Das Datum liegt in der bereits vorhandenen SQL Datenbank in diesem Format vor:

    20120802
     
  2. ukulele

    ukulele Datenbank-Guru

    Code:
    SELECT    *
    FROM    tabelle
    WHERE    datum >= datepart(yyyy,getdate()-2)*10000 + datepart(mm,getdate()-2)*100 + datepart(dd,getdate()-2)
     
    PLSQL_SQL gefällt das.
  3. dengg

    dengg Benutzer

    Ich hab jetzt versucht ab die Zeile ab datum per && an meine Abfrage anzuhängen. Datum hab ich angepasst. Das heißt in meinem Fall s_date. Es kommt zwar kein Fehler, aber es wird nichts angezeigt. Muss ich datepart auch noch anpassen oder ist das ein SQL Befehl?
    SQL Abfrage:
    "SELECT * FROM tb_activity WHERE assigned_to = 17 && closed = 'n' && s_date >= datepart(yyyy,getdate()-2)*10000 + datepart(mm,getdate()-2)*100 + datepart(dd,getdate()-2)";

    EDIT: Hab gerade in PHPMyAdmin gesehen, dass s_date ein varchar Feld mit 8 Feldern ist. Geht das dann auch?
    In meinem Fall brauch ich eigentlich nur ein datepart für den Tag oder?
     
  4. ukulele

    ukulele Datenbank-Guru

    Der VARCHAR ist das Problem, aber probier mal das:
    Code:
    SELECT    *
    FROM    tb_activity
    WHERE    assigned_to = 17
    AND        closed = 'n'
    AND        isnull(cast(s_date AS INT),0) >= datepart(yyyy,getdate()-2)*10000 + datepart(mm,getdate()-2)*100 + datepart(dd,getdate()-2)
    Ich habe && durch AND ersetzt, && habe ich noch nie gesehen und ist auf jedenfall nicht zu allen SQL DBs kompatibel.
    cast(s_date AS INT) sollte deinen VARCHAR Wert in INT umwandeln. isnull() fängt dabei mögliche Fehler ab und ersetzt sie durch 0.
    Diese Syntax geht unter MS SQL, sollte aber auch unter MySQL klappen.
     
  5. dengg

    dengg Benutzer

    Damit wird ebenfalls nichts ausgegeben. Das && habe ich eigentlich immer verwendet, aber gut zu wissen.
    Ich verstehe aber nicht, wieso du mit 10000 bzw. 100 multiplizierst. Ich hab jetzt versucht, den Befehl in PHPMyAdmin auszuführen. Da kommt aber der Fehler: #1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'INT),0) >= datepart(yyyy,getdate()-2)*10000 + datepart(mm,getda
     
  6. ukulele

    ukulele Datenbank-Guru

    Sry, immer diese Syntax Unterschiede :)
    Das multiplizieren mache ich, um die Ziffern an die richtige Stelle zu bekommen. Würde ich die Ziffern erst in Zeichenketten umwandeln und dann verketten, könnten mir Nullen bei Monaten oder Tagen fehlen. Daher rechne ich erst mit Zahlen.
    Code:
    SELECT    *
    FROM    tb_activity
    WHERE    assigned_to = 17
    AND        closed = 'n'
    AND        ifnull(cast(s_date AS INT),0) >= year(now()-2)*10000 + month(now()-2)*100 + day(now()-2)
    Wegen dem Monatswechsel ziehe ich von now() (MySQL) bzw. getdate() (MS SQL) erst 2 Tage ab. Ich hoffe MySQL gibt bei SELECT now() - 2 auch Heute minus zwei Tage aus.
    http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
    http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_ifnull
     
  7. dengg

    dengg Benutzer

    Hab jetzt gerade das SELECT now() -2 in PHPMyAdmin probiert. Dabei wird 20120803105004 ausgegeben. Also das heutige Datum mit momentaner Uhrzeit. Wenn ich das -2 weglasse, kommt natürlich das normale Datum 2012-08-03 10:50:04
     
  8. ukulele

    ukulele Datenbank-Guru

    gnarr
    Code:
    SELECT    date_add(now(), interval -2 day)
    müsste dann aber Heute - 2 Tage ausgeben.
    Code:
    SELECT    *
    FROM    tb_activity
    WHERE    assigned_to = 17
    AND        closed = 'n'
    AND        isnull(cast(s_date AS INT),0) >= year(date_add(now(), interval -2 day))*10000 + month(date_add(now(), interval -2 day))*100 + day(date_add(now(), interval -2 day))
     
  9. dengg

    dengg Benutzer

    Code:
    SELECT    date_add(now(), interval -2 day)
    Das funktioniert jetzt. Aber wie kriege ich das in die richtige Form? Also 20120801.

    In PHP funktionierts nicht. Scheint immer noch derselbe Syntax Error zu sein.
     
  10. ukulele

    ukulele Datenbank-Guru

    Eigentlich sollte er mit
    year(date_add(now(), interval -2 day))*10000
    die Jahreszahl aus dem Datum - 2 Tage ziehen, mit 10000 multiplizieren = 20120000 und mit
    month(date_add(now(), interval -2 day))*100
    sowie
    day(date_add(now(), interval -2 day))
    addieren = 20120801
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden