none
Datum aus Feldbezeichnern erstellen RRS feed

  • Frage

  • Hallo,

    ich habe 2 nvarchar Felder Datum und Zeit in einer Tabelle.

    Ich möchte in einer SP u.a. diese Felder zusammenfügen um es in einem Kriterium mit einem Datetime-Feld zu vergleichen. Wie funktioniert das?

    Gruß Andreas


    http://www.AccessBlog.de
    Montag, 18. Juli 2011 08:00

Antworten

  • Hallo Andreas,

    in der BOL stehen zu Cast und Convert die ganzen Datumstypen. Ich glaube, das Format ist 104, also statt 112 nimm 104

    • Als Antwort markiert Andreas Vogt Montag, 18. Juli 2011 13:44
    Montag, 18. Juli 2011 11:52
  • Ist der INNER JOIN auf Ventildaten korrekt?

    SELECT  S.ID_V ,
            S.Datum ,
            S.zeit ,
            S.Erfassungsdatum
    FROM    tbl_Ventil V
            LEFT JOIN tbl_Ventil_Daten VD ON V.ID_V = VD.ID_V
            INNER JOIN tbl_importVentil S ON V.ID_V = S.ID_V
    WHERE   CONVERT(DATETIME, S.Datum + ' ' + S.zeit, 104) <= V.Erfassungsdatum ;

    Der Datumsvergleich sollte eigentlich passen.


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    • Als Antwort markiert Andreas Vogt Dienstag, 19. Juli 2011 11:00
    Montag, 18. Juli 2011 14:17
    Moderator

Alle Antworten

  • Nach dem Warum frage ich gar nicht, z.B. so:

    DECLARE @Date VARCHAR(16) = '2011-07-18' ;
    DECLARE @Time VARCHAR(16) = '10:03:00.123' ;
    
    SELECT  CAST (@Date + ' ' + @Time AS DATETIME) ;

    Siehe CAST und CONVERT, falls du eine anderes Format als ISO speicherst.


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Montag, 18. Juli 2011 08:03
    Moderator
  • Hallo Andreas,

    Wie sind die Werte gespeichert? Welche Serverversion hast Du?

    Vorausgesetzt, es handelt sich um varchar-Felder im Format yyyymmdd (Datum) und ss:mm.ss (Zeit) dann:

    select convert(datetime, datum + ' ' zeit ,112)

    • Als Antwort vorgeschlagen Falk Krahl Montag, 18. Juli 2011 09:11
    Montag, 18. Juli 2011 08:06
  • Hallo,

    leider liegt der Datumswert im Format dd.mm.yyyy vor. Wie kann ich diesen konviertieren?

    Gruß Andreas


    http://www.AccessBlog.de
    Montag, 18. Juli 2011 11:34
  • Hallo Stefan,

    ne ich meinte dass Datum und Zeit als Datenfelder vorliegen, so wie von Christa interpretiert.

    Gruß Andreas


    http://www.AccessBlog.de
    Montag, 18. Juli 2011 11:37
  • Hallo Andreas,

    in der BOL stehen zu Cast und Convert die ganzen Datumstypen. Ich glaube, das Format ist 104, also statt 112 nimm 104

    • Als Antwort markiert Andreas Vogt Montag, 18. Juli 2011 13:44
    Montag, 18. Juli 2011 11:52
  • Und was verwendet man so in SELECT-Anweisungen normalerweise? Das war nur ein Beispiel.


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Montag, 18. Juli 2011 12:05
    Moderator
  • Hallo,

    ja so funktioniert es.

    Aber meine Abfrage funzt immer noch nicht ganz:

    SELECT     S.ID_V, S.Datum, S.zeit, S.Erfassungsdatum
    FROM         dbo.tbl_Ventil_Daten AS VD INNER JOIN
                          dbo.tbl_Ventil AS V INNER JOIN
                          dbo.tbl_importVentil AS S ON V.ID_V = S.ID_V ON VD.ID_V = V.ID_V
    WHERE     (CONVERT(datetime, S.Datum + ' ' + S.zeit, 104) <= V.Erfassungsdatum)

     

    Datum: 01.07.2011

    zeit: 21:49:00

    Erfassungsdatum: 20110715 14:27:00

    Drehe ich das kleiner gleich um, dann erhalte ich den einen Datensatz. Aber der 1.7.2011 ist doch nicht größer als der 15.7.2011??

    Wenn ich CONVERT(datetime, S.Datum + ' ' + S.zeit, 104) mit in das Select-Statement nehme erhalte ich 2011-07-01 21:49:00.000

    Wo ist da der Fehler?

    Gruß Andreas

     


    http://www.AccessBlog.de
    Montag, 18. Juli 2011 14:00
  • Ist der INNER JOIN auf Ventildaten korrekt?

    SELECT  S.ID_V ,
            S.Datum ,
            S.zeit ,
            S.Erfassungsdatum
    FROM    tbl_Ventil V
            LEFT JOIN tbl_Ventil_Daten VD ON V.ID_V = VD.ID_V
            INNER JOIN tbl_importVentil S ON V.ID_V = S.ID_V
    WHERE   CONVERT(DATETIME, S.Datum + ' ' + S.zeit, 104) <= V.Erfassungsdatum ;

    Der Datumsvergleich sollte eigentlich passen.


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    • Als Antwort markiert Andreas Vogt Dienstag, 19. Juli 2011 11:00
    Montag, 18. Juli 2011 14:17
    Moderator
  • Was für ein Datentyp ist denn V.Erfassungsdatum? Falls varchar, dann mußt Du auch konvertieren.
    Montag, 18. Juli 2011 14:46
  • Andreas Vogt wrote:

    leider liegt der Datumswert im Format dd.mm.yyyy vor. Wie kann ich diesen
    konviertieren?

    z.B. über String Manipulationen:

    Hier ein Beispiel:

    DECLARE @Datum NVARCHAR(10)
    DECLARE @Zeit NVARCHAR(8)
    SET @Datum = '20.01.2011'
    SET @Zeit = '12:13:14'
    SELECT CAST(SUBSTRING(@Datum, 7, 4)
          + '-' + SUBSTRING(@Datum, 4, 2)
          + '-' + SUBSTRING(@Datum, 1, 2)
          + ' '
          + @Zeit AS DATETIME) AS DatumZeitImDateTimeFormat

    HTH
    Henry

    Dienstag, 19. Juli 2011 07:09
  • Hallo,

    ja lag an den Inner Joins, funktioniert jetzt, danke.

    Gruß Andreas


    http://www.AccessBlog.de
    Dienstag, 19. Juli 2011 11:03