[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Mar 2001
    Beiträge
    163

    Post SQL - Datum (8,0) drehen und abfragen

    Hallo *all,

    ich habe folgendes Problem :

    Datei mit einem numerischen Feld 8,0 mit einem Datum ttmmjjjj als Inhalt.
    Jetzt möchte ich das Datum in einem Select drehen und in der Where-Klausel abfragen.
    Ist so etwas Möglich, und wenn ja wie ?
    Probiert habe ich es bereits so :

    select SUBSTR(DIGITS(PAUSTRITT), 5, 4) CONCAT
    SUBSTR(DIGITS(PAUSTRITT), 3, 2) CONCAT SUBSTR(DIGITS(PAUSTRITT), 1,
    2) AS AUSTRITT from hdscw/hansalf1 where austritt > '00000000'

    Für eine Idee bin ich sehr dankbar !!

    Peter
    Viele Grüsse

    Peter

  2. #2
    Registriert seit
    Jan 2001
    Beiträge
    340

    Post

    Code:
    select * from
       ( select SUBSTR(DIGITS(PAUSTRITT), 5, 4) CONCAT                      
                SUBSTR(DIGITS(PAUSTRITT), 3, 2) CONCAT 
                SUBSTR(DIGITS(PAUSTRITT), 1, 2)
            AS AUSTRITT from hdscw/hansalf1) x 
       where austritt > '00000000'

  3. #3
    Registriert seit
    Mar 2001
    Beiträge
    163

    Talking

    Hallo,

    leider funktioniert der SQL so nicht.
    Fehlermeldung :

    Spalte Austritt nicht in Tabelle...

    Noch 'ne Idee ?

    Gruß
    Peter
    Viele Grüsse

    Peter

  4. #4
    Registriert seit
    Mar 2001
    Beiträge
    163

    Post

    Sorry,

    Tippfehler meinerseits, funktioniert natürlich prima!!

    Vielen Dank

    Peter
    Viele Grüsse

    Peter

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241

    Post

    Dies ist natürlich so möglich, aber nicht performant, da man erst eine Ergebnistabelle erstellt, die dann abgefragt wird.
    Besser ist, den Ausdruck in der WHERE-Bedingung anzugeben (man kann auch Berechnungen abfragen):

    select * from hdscw/hansalf1
    where SUBSTR(DIGITS(PAUSTRITT), 5, 4) CONCAT SUBSTR(DIGITS(PAUSTRITT), 3, 2) CONCAT SUBSTR(DIGITS(PAUSTRITT), 1, 2) > '00000000'

    [Dieser Beitrag wurde von Fuerchau am 02. Mai 2003 editiert.]
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Mar 2001
    Beiträge
    163
    Nochmals vielen Dank, man lernt ja irgendwie nie aus :-))
    Viele Grüsse

    Peter

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.287

    Post

    Hallo,
    nur um falschem verständnis vorzubeugen:
    1. SQL handelt per Definition Ergebnismengen orientiert und der Optimizer des Datenbank Management Systems entscheidet, wie eine Abfrage ausgeführt wird. Welche Form eines Queries schneller ist, sagt höchstens was über die Qualität des Optimizers aus.
    2. Die angeblich bessere Formulierung mit der Operation im Select ist
    keineswegs so gut, wie der Autor meint, hier wird das Datum zweimal verzwazzelt, im SELECT und in der WHERE Klausel.
    Wenn schon, dann:

    select SUBSTR(DIGITS(PAUSTRITT), 5, 4) CONCAT
    SUBSTR(DIGITS(PAUSTRITT), 3, 2) CONCAT SUBSTR(DIGITS(PAUSTRITT), 1,
    2) from hdscw/hansalf1 where paustritt > xyz

    und bei xyz den verdrehten Abfragewert hinschreiben. Wenn der variabel ist kann man das auch mit SQL bewerkstelligen:

    dec(substr(...) concat ...)

    3. der Original Versuch ging übrigens nicht, weil die WHERE Klausel vor der SELECT Klausel ausgeführt wird und deshalb die dort benannten Felder noch nicht bekannt sind.

    mfg

    Dieter Bender

    <BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>Original erstellt von Fuerchau:
    Dies ist natürlich so möglich, aber nicht performant, da man erst eine Ergebnistabelle erstellt, die dann abgefragt wird.
    Besser ist, den Ausdruck in der WHERE-Bedingung anzugeben (man kann auch Berechnungen abfragen):

    select * from hdscw/hansalf1
    where SUBSTR(DIGITS(PAUSTRITT), 5, 4) CONCAT SUBSTR(DIGITS(PAUSTRITT), 3, 2) CONCAT SUBSTR(DIGITS(PAUSTRITT), 1, 2) &gt; '00000000'

    [Dieser Beitrag wurde von Fuerchau am 02. Mai 2003 editiert.]
    [/quote]

    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.241

    Post

    @dieter

    Wie du in der ursprünglichen Frage sehen kannst, steht das Datum in der Form TTMMJJJJ zur Verfügung, so dass ich mit dem umgedrehten Wert die Abfrage ausführen muss.

    Wenn ich also PAUSTRITT direkt abfrage, habe ich das Problem, dass ich sinnvoll nur auf = abfragen kann.
    Deshalb ist es besser, im Where den Ausdruck abzufragen an Stelle des Feldes.

    Wenn ich PAUSTRITT allerdings in der umgedrehten Form auch als Ergebnis benötige, dann sollte ich natürlich so wie rmittag abfragen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. SQL Datum
    By steven_r in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 04-12-06, 12:16
  2. SQL: Aus mehreren Feldern ein Datum erkennen
    By I0N in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 21-11-06, 12:44
  3. SQL DATUM
    By steven_r in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 20-11-06, 18:37
  4. Quersumme mit SQL abfragen
    By behmer in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 03-08-06, 09:53
  5. Aktuelles Datum per SQL
    By jakarto in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 17-02-06, 17:37

Berechtigungen

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