Announcement

Collapse
No announcement yet.

Daumsfilter in Kompliziert

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Daumsfilter in Kompliziert

    Hallo an alle SQL Experten^^

    Ich hab hier ein Problem an dem ich mir schon ein Paar Tage die Zähne aus beisse.

    Ich soll eine recht Komplexe Abfrage von Access in den SQL-Server übertragen und dabei werden auch mehrere variablen mit übergeben.

    Insovern kein Problem ABER das Datum nach dem gefilterd werden soll bereited mir probleme.

    Datum und Uhrzeit sind nämlich in getrennten Spalten und es soll so gefilterd werden das alles angezeigt wird was zwischen diesem Datum und Uhrzeit liegt.
    z.B. Wenn man von 1.1.2009 14:00 bis 3.1.2009 22:00 sollem am 2.1.2009 alle 24h angezeigt werden.

    Ich experimentier jetzt schon eine Zeit lang mit Datum und Zeit auseinander nehmen und neu zusammen Setzen komm aber auf überhaubt keinen Grünen
    Zweig.
    Hoffe ihr könnt mir helfen.

  • #2
    Datum und Uhrzeit sind nämlich in getrennten Spalten
    Und wie sind die Felder definiert, als datetime oder char?
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Am SQL-Server als Datetime

      Comment


      • #4
        [highlight=SQL]CREATE TABLE #Dummy
        (Datum datetime,
        Uhrzeit datetime)
        GO

        INSERT INTO #Dummy VALUES ('20090101', '13:00:00.000')
        INSERT INTO #Dummy VALUES ('20090101', '14:00:00.000')
        INSERT INTO #Dummy VALUES ('20090102', '12:00:00.000')
        INSERT INTO #Dummy VALUES ('20090103', '22:00:00.000')
        INSERT INTO #Dummy VALUES ('20090103', '22:00:01.000')
        GO
        --Kontrollausgabe
        SELECT *, Datum + Uhrzeit FROM #Dummy
        --Selektion
        SELECT *, Datum + Uhrzeit
        FROM #Dummy
        WHERE (Datum + Uhrzeit) BETWEEN
        {ts N'2009-01-01 14:00:00.000'} AND {ts N'2009-01-03 22:00:00.000'}
        GO
        DROP TABLE #Dummy[/highlight]

        [highlight=code]Datum Uhrzeit
        ----------------------- ----------------------- -----------------------
        2009-01-01 00:00:00.000 1900-01-01 14:00:00.000 2009-01-01 14:00:00.000
        2009-01-02 00:00:00.000 1900-01-01 12:00:00.000 2009-01-02 12:00:00.000
        2009-01-03 00:00:00.000 1900-01-01 22:00:00.000 2009-01-03 22:00:00.000

        (3 Zeile(n) betroffen)[/highlight]

        Das ist aber weder eine schöne noch eine saubere Lösung.

        Mit Datum/Uhrzeit sollte man aufpassen, Beispiel: Was erwartest Du hier für ein Ergebnis?
        SELECT {ts N'2009-01-03 23:59:59.998'}
        SELECT {ts N'2009-01-03 23:59:59.999'}

        Führe die Werte bei der Übernahme lieber in ein Datetime Feld über und das da beachten.
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          Danke für die schnelle antwort hat mir sehr weiter geholfen

          allerdings tritt jetzt folgendes auf:

          Das ergebiss weicht immer um ca +4 Tage vom Vom Datum ab und die Uhrzeit wird
          auch nicht richtig berücksichtigt.
          Ich poste mal die wichtigsen teile meiner Abfrage

          Code:
          EXEC [Daten].[dbo].[Export_SP] '01.04.2008 10:00:00', 
          '29.04.2008 14:08:00'
          Code:
          ALTER PROCEDURE [dbo].[Export_SP]
          
          	@DatZeitVon nvarchar(20),
          	@DatZeitBis nvarchar(20),
          AS
          	BEGIN
          
          	SET NOCOUNT ON;
          	SELECT
          	DatenT.StartDatum + DatenT.StartUhrzeit AS DatumUndUhrzeit
          	FROM VerpressDatenT
          
          	WHERE
          	DatenT.StartDatum + DatenT.StartUhrzeit between cast(@DatZeitVon as
          datetime) and cast(@DatZeitBis as datetime)
          Hoffe das hilft dir etwas weiter wo mein Problem liegt denn ich bin noch ein
          ziemlicher anfänger am SQL Server

          Comment


          • #6
            Prinzipiell funktioniert es ja, das zeigt mein Besipiel.

            Wenn es bei Dir nicht funktioniert, liegt es vermutlich an den Daten (die ich nicht habe)
            Was Kommt den raus, wenn Du
            SELECT * FROM VerpressDatenT
            machst, genauer: Was für ein Datum steht in der "StartUhrzeit"?

            Grundsätzlich ist es so, das Office (Access) und der SQL Server einen anderen 0-Base Wert fürs Datum haben

            Access:
            ?format(cdate(0), "dd.mm.yyyy hh:mm:ss")
            30.12.1899 00:00:00

            SQL Server:
            select convert(datetime, 0)
            1900-01-01 00:00:00.000

            Wenn die Werte nur so irgendwie übernommen wurden, funktioniert mein Beispiel mit Deinen Daten nicht.

            Dann musste es etwas aufwendiger gestalten und entsprechend konvertieren:

            [highlight=SQL]--Kontrollausgabe
            SELECT *,
            CONVERT(datetime, CONVERT(varchar(8), Datum, 112) + ' '
            + CONVERT(varchar(12), Uhrzeit, 114), 126)
            FROM #Dummy
            --Selektion
            SELECT *,
            CONVERT(datetime, CONVERT(varchar(8), Datum, 112) + ' '
            + CONVERT(varchar(12), Uhrzeit, 114), 126)
            FROM #Dummy
            WHERE CONVERT(datetime, CONVERT(varchar(8), Datum, 112) + ' '
            + CONVERT(varchar(12), Uhrzeit, 114), 126)
            BETWEEN
            {ts N'2009-01-01 14:00:00.000'} AND {ts N'2009-01-03 22:00:00.000'}[/highlight]
            Olaf Helper

            <Blog> <Xing>
            * cogito ergo sum * errare humanum est * quote erat demonstrandum *
            Wenn ich denke, ist das ein Fehler und das beweise ich täglich

            Comment


            • #7
              Ein großes Danke nach Hannover!^^

              Du Hast mir da sehr weiter geholfen. Denn es sind nämlich bei Startdatum alles
              Daten vom 1899-12-30 00:00:00.000.(Diese Tabelle wurde aus einer MDB Konvertiert)

              Aber anscheinen hab ich dann bei deiner Prozedur was noch nicht ganz verstanden
              denn das ergebniss schaut zwar schon besser aus ist aber noch nicht richtig.
              Naja ich werd mich dann Montag weiter Drum kümmern ein schönes Wochen-
              ende wünsch ich dir dann

              Comment

              Working...
              X