Nugorra: Vortag

Hallo!

Mein Problem:

Ich würde gerne Daten vom Vortag rausfiltern,
hab aber das Datum nur in einer Spalte varchar(25).
Kann ich das irgendwie trotzdem umsetzen ?
(PHP Lösung wäre auch OK nur das varchar(25)kann ich nicht ändern)

Danke im Vorraus

  1. Hallo,

    es gibt in vielen Datenbanksystemen Funktionen um z.b. Zeichenketten in Datumswerte und vice versa zu konvertieren. Danach kannst du weitere Datumsfunktionen anwenden zum Differenzen berechnen (manchmal heisst das DateDiff o.ä.).

    Beschäftige dich bitte mit dem Handbuch (in welcher Form auch immer) deines Datenbanksystems, welche Funktionen es für Datumswerte bereitstellt.

    Grüsse
    Frank

    1. Problem bei DateDiff ist, das Datumsformat ich hab jetzt ein DD-MM-YYYY,
      aber DateDiff braucht YYYY-MM-DD.

      1. Problem bei DateDiff ist, das Datumsformat ich hab jetzt ein DD-MM-YYYY,
        aber DateDiff braucht YYYY-MM-DD.

        MySQL kennt u.a. DATE_FORMAT (http://dev.mysql.com/doc/refman/5.1/de/date-and-time-functions.html), evtl. bietet dein uns bis dato unbekanntes DBMS etwas Ähnliches.

        Siechfred

        --
        Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
        1. Problem bei DateDiff ist, das Datumsformat ich hab jetzt ein DD-MM-YYYY,
          aber DateDiff braucht YYYY-MM-DD.

          MySQL kennt u.a. DATE_FORMAT (http://dev.mysql.com/doc/refman/5.1/de/date-and-time-functions.html), evtl. bietet dein uns bis dato unbekanntes DBMS etwas Ähnliches.

          Anderenfalls eben den Umweg via PHP und das Datumsformat wandeln. Oder schauen, ob das DBMS Stringfunktionen bietet.

          Nick

          --
          --------------------------------------------------
          http://www.xilp.eu
          XILP Internet Links People
          Dein persoenliches privates Netzwerk
          aus Freunden, Verwandten, Bekannten und Kollegen.
          --------------------------------------------------
          1. Anderenfalls eben den Umweg via PHP und das Datumsformat wandeln. Oder schauen, ob das DBMS Stringfunktionen bietet.

            Werd wohl den PHP weg nehmen, ( hab jetzt die aktuelle version einer der Tabellen bekommen und seh jetzt das das Format DD-(z.B.May)-YYYY HH:MM:SS ist ) .

            1. Hallo

              Anderenfalls eben den Umweg via PHP und das Datumsformat wandeln. Oder schauen, ob das DBMS Stringfunktionen bietet.

              Werd wohl den PHP weg nehmen, ( hab jetzt die aktuelle version einer der Tabellen bekommen und seh jetzt das das Format DD-(z.B.May)-YYYY HH:MM:SS ist ) .

              Das stellt immer noch kein Problem dar. Welches Datenbankmanagementsystem (DBMS) nutzt Du?

              [ ] Access
              [ ] DB2
              [ ] dBASE
              [ ] Filemaker
              [ ] FoxPro
              [ ] Informix
              [ ] MS SQL-Server
              [ ] MySQL
              [ ] Oracle
              [ ] Paradox
              [ ] PostgreSQL
              [ ] SQLite
              [ ] ein anderes, und zwar ____________________________

              Ganz bestimmt hat Dein DBMS nette Zeichenketten und Umwandlungsfunktionen, die
              das für Dich erledigen. Grundsätzlich solltest Du allerdings daran denken,
              diesen Zustand zu ändern - und die Datums-/Zeitangaben in einem Feld mit
              angemessenen Datentyp zu speichern.

              Freundliche Grüße

              Vinzenz

              1. Datenbankmanagementsystem (DBMS) nutzt Du?

                [ ] Access
                [ ] DB2
                [ ] dBASE
                [ ] Filemaker
                [ ] FoxPro
                [ ] Informix
                [ ] MS SQL-Server
                [X] MySQL
                [ ] Oracle
                [ ] Paradox
                [ ] PostgreSQL
                [ ] SQLite
                [ ] ein anderes, und zwar ____________________________

                Ganz bestimmt hat Dein DBMS nette Zeichenketten und Umwandlungsfunktionen, die
                das für Dich erledigen. Grundsätzlich solltest Du allerdings daran denken,
                diesen Zustand zu ändern - und die Datums-/Zeitangaben in einem Feld mit
                angemessenen Datentyp zu speichern.

                Freundliche Grüße

                Vinzenz

                Wenn es den gehen würde, ^^ ist ne Vorgabe die ich leider nicht ändern darf.
                Wäre aber nett wenn mir da mal wer helfen würde,
                da ich in SQL nicht so gut bin.

                MFG

                1. Hallo,

                  Datenbankmanagementsystem (DBMS) nutzt Du?

                  [X] MySQL
                  Ganz bestimmt hat Dein DBMS nette Zeichenketten und Umwandlungsfunktionen, die
                  das für Dich erledigen.

                  dem ist so (MySQL 4.1.1 oder neuer ...)

                  STR_TO_DATE in Verbindung mit dem geeigneten Format. Die Formate findest Du
                  bei DATE_FORMAT, was Dir ja bereits gesagt wurde. Soweit ich das sehe, sollte
                  das kein Problem sein.

                  Für den Monat nimmst Du entweder %b oder %M. Leider ist der aktuelle Monat der
                  einzige Monat im Jahr, für den diese beiden die gleiche Ausgabe liefern :-)

                  Nach dem Umwandeln kannst Du bequem mit DATE_SUB() den Vortag ermitteln,
                  danach mit DATE_FORMAT die gewünschte Ausgabe erzeugen:

                  Beispiel: '12-January-2007 14:08:03'
                  Daraus folgt für den Format-String: '%d-%M-%Y %H:%i%s'

                  SELECT  
                      STR_TO_DATE(  
                          '12-January-2007 14:08:03',       -- deine Datumszeichenkette  
                          '%d-%M-%Y %H:%i:%s'               -- das passende Format  
                      )
                  

                  wandelt die Zeichenkette in einen Datumswert um.

                  SELECT                     -- Vortag:  
                      DATE_SUB(                             -- Subtrahiere vom  
                          STR_TO_DATE(                      -- in einen Datumswert  
                              '12-January-2007 14:08:03',   -- umgewandelte String  
                              '%d-%M-%Y %H:%i:%s'  
                          ),  
                          INTERVAL 1 DAY                    -- einen Tag  
                      )
                  

                  liefert nun den Vortag und mit DATE_FORMAT kannst Du diesen Tab nach
                  Belieben formatiert ausgeben, beispielsweise im gleichen Format wie
                  die Ausgangsdaten:

                  SELECT  
                      DATE_FORMAT(                          -- Formatiere  
                          DATE_SUB(                         -- den Vortag  
                              STR_TO_DATE(  
                                  '12-January-2007 14:08:03',  
                                  '%d-%M-%Y %H:%i:%s'  
                              ),  
                              INTERVAL 1 DAY  
                          ),  
                          '%d-%M-%Y %H:%i:%s'               -- wie benötigt  
                      )
                  

                  Wenn es den gehen würde, ^^ ist ne Vorgabe die ich leider nicht ändern darf.

                  Das ist eine untaugliche Vorgabe! Wer diese gemacht hat, hat von Datenbanken
                  keine Ahnung oder nur gefährliches Halbwissen.

                  Freundliche Grüße

                  Vinzenz

                  1. Hi Danke für die Antwort!!!
                    Hierzu:

                    Das ist eine untaugliche Vorgabe! Wer diese gemacht hat, hat von Datenbanken
                    keine Ahnung oder nur gefährliches Halbwissen.

                    Das ist ne Ausgabe einer Maschine, die eigentlich  alle Berichte Drucken sollte.
                    Wurde irgendwann gesagt, ist uns zu teuer das Papier,
                    Jetzt stellen wir doch mal auf DB um,
                    deshalb ist das Format leider gegeben.

      2. Hallo,

        Problem bei DateDiff ist, das Datumsformat ich hab jetzt ein DD-MM-YYYY,
        aber DateDiff braucht YYYY-MM-DD.

        bietet Dein Datenbankmanagementsystem keine Zeichenkettenfunktionen?
        In Transact-SQL, dem SQL-Dialekt des MS-SQL-Servers kannst Du z.B. mit

        SELECT  
            SUBSTRING('29-05-2006', 7, 4)  
                + '-' + SUBSTRING('29-05-2006', 4, 2)  
                + '-' + SUBSTRING('29-05-2006', 1, 2)
        

        Deine Zeichenkette so umformatieren, dass aus DD-MM-YYYY YYYY-MM-DD wird.
        Das geht mit den Zeichenkettenfunktionen Deines Datenbankmanagementsystems
        (DBMS) ganz sicher auch.

        Freundliche Grüße

        Vinzenz

  2. hi,

    hab aber das Datum nur in einer Spalte varchar(25).
    Kann ich das irgendwie trotzdem umsetzen ?
    (PHP Lösung wäre auch OK nur das varchar(25)kann ich nicht ändern)

    Wer sagt, dass du das nicht ändern "kannst"?

    Es wäre _dringend_ anzuraten, denn ein Datum in einem Varchar-Feld ist wirklich ganz großer Murks.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Es wäre _dringend_ anzuraten, denn ein Datum in einem Varchar-Feld ist wirklich ganz großer Murks.

      Im Prinzip ja, aber ich kenne Datenhaltungen in denen (fast) jedes Feld in VARCHAR oder CHAR vorliegt. Kannst Du Dir denken warum?

      1. hi,

        Es wäre _dringend_ anzuraten, denn ein Datum in einem Varchar-Feld ist wirklich ganz großer Murks.

        Im Prinzip ja, aber ich kenne Datenhaltungen in denen (fast) jedes Feld in VARCHAR oder CHAR vorliegt. Kannst Du Dir denken warum?

        Weil T-Systems beteiligt war ...?

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Es wäre _dringend_ anzuraten, denn ein Datum in einem Varchar-Feld ist wirklich ganz großer Murks.

          Im Prinzip ja, aber ich kenne Datenhaltungen in denen (fast) jedes Feld in VARCHAR oder CHAR vorliegt. Kannst Du Dir denken warum?

          Weil T-Systems beteiligt war ...?

          LOL - weitere Vorschläge?