[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Sep 2011
    Beiträge
    20

    Select Abfrage now() läuft auf Fehler

    Hallo,

    ich habe in MS Access 2003 eine Tabellenverknüpfung auf eine AS400 Datei per ODBC, hier frage ich unter anderen ein
    Datums-Feld ab (BMDTEE, Datentyp=numeric, Länge=8) was auch
    funtioniert mit der Direkteingaben (BMDTEE <= '20111231') oder mit BETWEEN, jetz möchte ich aber die Abfrage aber mit Heute (now()) bzw. Heute -5 .Die Fehlermeldung ist: ...Operanden des Vergleichsoperators = sind nicht kompatibel. (#-401)
    Wer kann mir hier weiterhelfen???

  2. #2
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Hallo,
    entweder konvertierst die Zahl in ein Datum oder umgekehrt.
    Ich würde allerdings ersteres bevorzugen.
    Die Konvertierung hängt dann auch noch vom Datumsformat ab welches bei dir eingestellt ist.
    Z.B. CCYY-MM-DD oder DD-MM-YY usw.
    Code:
    WHERE current date = date('2012-11-14')
    lg Andreas

  3. #3
    Registriert seit
    Sep 2011
    Beiträge
    20
    Hallo Andreas,

    stehe gerade ein bischen auf dem Schlauch , ich bin noch Amateur in
    diesem Bereich mein Format sieht so aus (CCYY-MM-DD) z.Bsp.
    Code:
    where BMDTEE <= '20111231'
    Was muss ich nun genau tun, damit ich
    nur die Daten von Heute angezeigt bekomme??
    Ich muss das dann fest für die User abspeichern!!

    Danke

  4. #4
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Du musst die Abfrage so bauen, dass sie dann wie folgt aussieht:
    Code:
    WHERE date('2012-11-14') <= current date
    Das kannst du z.B. so machen:
    Code:
    where current date >=                             
    date (left(char(BMDTEE ), 4) Concat '-' concat  
    Substring(char(BMDTEE ), 5, 2) Concat '-' concat
    right(trim (char(BMDTEE )), 2))
    lg Andreas

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    @Andreas

    Nimm lieber DIGITS statt CHAR!

    CHAR entfernt führende Nullen und richtet linksbündig aus und könnte somit zu unliebsamen Überraschungen führen.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  6. #6
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Zitat Zitat von B.Hauser Beitrag anzeigen
    @Andreas

    Nimm lieber DIGITS statt CHAR!

    CHAR entfernt führende Nullen und richtet linksbündig aus und könnte somit zu unliebsamen Überraschungen führen.
    Stimmt, bei CHAR muss man noch ein TRIM dazu setzen.
    DIGITS ist ein guter Tipp!

  7. #7
    Registriert seit
    Sep 2011
    Beiträge
    20
    Hallo,
    erstmal Vielen Dank für Euren regen Einsatz und die vielen Tipps, finde ich echt Klasse, mein Problem ist leider noch nicht ganz gelöst. Ich habe jetzt zwar die Spalte "date", die ich auch sortieren kann, aber das ich nur die Ansicht eines Tages (aktuellen Tag am besten now()!!!) bekomme ich nicht hin, ich habe immer noch alle Datensätze, hier der Code:
    Code:
    select bmfirm, bmiden, bmidv, bmprnr, bmqkz, bmqsta,            
           bmort, bmber,                  
           bmbmen, bmvmen, bmrmen, bmlm, bmmlm,                     
           bmlenr, bmzule, bmbst1, bmbstp,                          
           bmwenr, bmwepo, bmdtdc, bmdtee, 
    (left(DIGITS(BMDTEE ), 4) Concat '-' concat  
    Substring(DIGITS(BMDTEE ), 5, 2) Concat '-' concat
    right(trim (DIGITS(BMDTEE )), 2))date                            
    from birdatv6.pbestlo
    
    WHERE current date = date('2012-11-14')
    order by date  DESC
    Wo liegt mein Fehler???

  8. #8
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Ich glaube du hast uns da etwas missverstanden.
    Die Anweisung sollte wie folgt aussehen:

    Code:
    select bmfirm, bmiden, bmidv, bmprnr, bmqkz, bmqsta,            
           bmort, bmber,                  
           bmbmen, bmvmen, bmrmen, bmlm, bmmlm,                     
           bmlenr, bmzule, bmbst1, bmbstp,                          
           bmwenr, bmwepo, bmdtdc, bmdtee,                         
    from birdatv6.pbestlo
    
    WHERE Date(Digits(BMDTEE ) concat '000000')) = Current Date
    order by bmdtee DESC

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Das Tagesdatum ist ja auch der 14.11.2012.

    Wenn Du also selektierst
    Where Tagesdatum = 14.11.2012 bekommst Du auch alle Datensätze.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  10. #10
    Registriert seit
    Sep 2011
    Beiträge
    20
    Hallo Britta,

    ich habe mich wahrscheinlich nicht eindeutig ausgedrückt iich bekomme nicht nur die Datensätze vom 14.11.2012 (das wäre ja okay) sondern von allen Tagen!!!

    Hallo Andreas,

    funktioniert leider nicht (ODBC-Aufruf fehlgeschlagen [IBM] [System i Access ODBC-Treiber][DB2 für i5/OS]SQL0104-Token ) ungültig. Gültige Token:......)
    Ich habe es auch direkt im "System i Navigator" getestet da wird die letzte schließende Klammer markiert (läuft nicht), nehme ich die weg kommt die
    Fehlermeldung:
    "Nachricht: [SQL0181] Wert in Datums-, Zeit- oder Zeitmarkenzeichenfolge ungültig. Ursache . . . . : Die Darstellung der Zeichenfolge eines Datums-, Zeit- oder Zeitmarkenwerts erfüllt nicht die Bedingungen. *N ist entweder die ungültige Zeichenfolgekonstante oder die Spalten- oder Host-Variable, die die Zeichenfolge enthielt...."

  11. #11
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    1. Birgitta hat dich schon richtig verstanden.
    Sie hat ganz richtig gesagt, dass du alle Sätze bekommst, wenn du Tagesdatum mit Tagesdatum vergleichst.
    Es wäre das selbe wenn du WHERE 1=1 schreiben würdest.

    2. zum Fehler:
    ODBC/JDBC Treiber führt einige konvertierungen durch.
    Probier einfach folgendes:

    Code:
    select bmfirm, bmiden, bmidv, bmprnr, bmqkz, bmqsta,            
           bmort, bmber,                  
           bmbmen, bmvmen, bmrmen, bmlm, bmmlm,                     
           bmlenr, bmzule, bmbst1, bmbstp,                          
           bmwenr, bmwepo, bmdtdc, bmdtee,                         
    from birdatv6.pbestlo
    
    WHERE Date(Trim (Char (BMDTEE )) concat '000000') = Current Date
    order by bmdtee DESC

  12. #12
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Ein Datum ist ein Datum und weder ein numerischer Wert noch ein alphanumerischer Wert.
    SQL ist jedoch so schlau, dass es einen alphanumerischen Wert in einem der folgenden Formate 'JJJJ-MM-TT', 'TT.MM.JJJJ' oder 'MM/TT/JJJJ' als Datum interpretieren und mit einem Datum vergleichen kann.
    Mit der Funktion DATE kann allerdings auch ein alphanumerischer String im Format 'JJJJMMTTHHMMSS' (ohne Trennzeichen) in ein echtes Datum konvertiert werden.

    Ein Datum im Format JJJJMMTT kann SQL nicht erkennen und nicht (mit der Funktion DATE()) konvertieren.

    Vorausgesetzt Dein numerisches Datum ist im Format JJJJMMTT, kann die Abfrage wie folgt aussehen:

    Code:
    Select *
    From YourTable
    Where Date(Digits(NumDatum) concat '000000')) = Current_Date;
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

Similar Threads

  1. JDBC Abfrage mit DB-Tool , SQL0901 Fehler
    By COS in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 17-11-08, 08:13
  2. CREATE FUNCTION mit select im Bauch ?
    By cheffe1008 in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 21-09-06, 16:05
  3. Triggersyntax erzeugt nur Fehler
    By deni87991 in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 24-08-06, 10:05
  4. Fehler im SQL bzw. Joblog
    By GraueEminenz in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 10-07-06, 11:58
  5. Cobol-Programm mit Embedded SQL (SELECT CASE)
    By klausgkv in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 08-06-06, 13:47

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •