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

Datum auswählen

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von ilmstruppi, 1 August 2013.

  1. ilmstruppi

    ilmstruppi Neuer Benutzer

    Hallo,

    ich möchte eine Abfrage machen in der das heutige und das gestrige Datum eingebunden wird.
    Wie setze ich das um? Die Abfrage muss aber dynamisch sein, ich kann also nicht datum= '01.08.2013' sagen.

    Ich habe es bis jezt so probiert:
    where DATUM between DATEADD(day, ISNULL(BEKSTAT.DATUM,0) -'1' and GETDATE()
    Hinweiß:
    Das Datum in der Datenbank ist als 4 stellige Zahl hinterlegt (zB.: 3428)


    Ich hoffe ihr könnt mir helfen.
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Ich glaube, in diesem Falle kann man Dir nicht helfen. Wie soll man denn aus einem Datum auf diese Zahl kommen? Warum verwendest Du nicht passende Datentypen?
     
  3. ilmstruppi

    ilmstruppi Neuer Benutzer

    Weil ich das Datum so vorgegeben bekomme, und dieses laut meinem Kollegen so verarbeitet werden kann:

    DATEADD(day, ISNULL(p.aufdat,0), convert(date,'01.01.1996',104)) end,112),'')

    Nun ist die Frage wie ich das sinngemäß einbauen kann.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Dann laß Dir von Deinem Kollegen eine Formel geben, wie man das heutige und das gestrige Datum berechnet, und nutze diese Formeln in Deiner WHERE-Condition.
    Mit 'richtigen' Datentypen wäre es trivial: where date_column between current_date-1 and current_date (in PG, in M$SQL ganz sicher ähnlich einfach)
     
  5. ilmstruppi

    ilmstruppi Neuer Benutzer

    Das ist die Umrechnung. Tag null ist der 1.1.1996.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Nun ja, weil Du es bist:

    Code:
    test=# create or replace function ilmstruppi (date) returns int as $$select ((extract(epoch from current_date::timestamp) -  extract(epoch from '1996-01-01'::timestamp)) / (3600*24))::int;$$ language sql;
    CREATE FUNCTION
    test=*# select * from ilmstruppi(current_date);
     ilmstruppi
    ------------
           6422
    (1 row)
    
    test=*# create table foo as select * from generate_series(6418,6425) datum;
    SELECT 8
    test=*# select * from foo;
     datum
    -------
      6418
      6419
      6420
      6421
      6422
      6423
      6424
      6425
    (8 rows)
    
    test=*# select * from foo where datum between ilmstruppi(current_date-1) and ilmstruppi(current_date);
     datum
    -------
      6422
    (1 row)
    
    *smile*

    Mal echt: warum speichert man ein Datum so krude?

    Andreas
     
  7. ukulele

    ukulele Datenbank-Guru

    Also dein Code
    Code:
    DATEADD(day, ISNULL(p.aufda,0), convert(date,'01.01.1996',104)) end,112),'')
    läuft bei mir unter MSSQL schonmal nicht. Das END ist vermutlich Teil von irgendetwas Anderem und die Syntax stimmt somit am Ende nicht. Ausserdem bekomme ich mit CONVERT(DATE,[...]) die Meldung das er INT nicht in DATE konvertieren kann / will, warum habe ich jetzt nicht weiter verfolgt. Hier mal etwas Testcode wie es laufen müsste:
    Code:
    DECLARE    @Datum INT
    SET        @Datum = 6426
    SELECT    convert(DATE,convert(DATETIME,(isnull(@Datum,0) + 35063),104),104)
    SELECT    convert(DATE,getdate(),104)
    SELECT    convert(DATE,getdate()-1,104)
     
    SELECT    *
    FROM    tabelle
    WHERE    convert(DATE,convert(DATETIME,(isnull(Datum,0) + 35063),104),104)
    BETWEEN    convert(DATE,getdate()-1,104)
    AND        convert(DATE,getdate(),104)
     
  8. funkyice

    funkyice Benutzer

    Hallo,

    ich hoffe ich habe es richtig verstanden, um an das heutige Datum (ohne Uhrzeit) zu gelangen funktioniert bei mir:
    Code:
    (CONVERT(Datetime,CONVERT(VARCHAR,GETDATE(),112))) 
    Für das Datum von "gestern":
    Code:
    (CONVERT(Datetime,CONVERT(VARCHAR,GETDATE()-1,112))))
    Kannst es ja mal in eine leere SELECT einfügen, dann siehst Du, ob Dir die korrekten Daten ausgegeben werden.
     
  9. Benutzer0000

    Benutzer0000 Benutzer

    Du kannst dir diese Seite ansehen. Hier findest du bestimmt das was du suchst.
    BTW: GetDate() Gibt schon einen DateTime wert zurück, somit musst du diesen nicht mehr umwandeln ... Möchtest du die Uhrzeit rausgefiltert bekommen, so musst du dies in "Date" umwandeln. Date ist ein Datumstyp, der keine Zeit speichert.

    MFG
     
  10. ukulele

    ukulele Datenbank-Guru

    Nicht jede MSSQL Version kann DATE.
     
  11. Benutzer0000

    Benutzer0000 Benutzer

    dann würde ich sagen bzw. man kann es auch nach nem anderen bestimmten format ändern:
    Code:
    Convert(varchar, GETDATE(), 104)
     
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