Avatar billede geronimo Nybegynder
15. april 2016 - 13:03 Der er 4 kommentarer og
1 løsning

IF del af tekststreng = anden tekststreng... do..?

Hej alle! Jeg er langt fra sikker på det er den rigtige gruppe, men den er nok ikke heeelt forkert...

Ok, jeg sidder og roder med at lave en hjemmeside der henter noget data fra en MS SQL og jeg er langt fra ekspert på området! Det er en side som er skrevet af en anden gut, det er altså ikke noget jeg selv har lavet, men jeg har dog kunne gennemskue det meste, ind til nu!

Vi har nogen værdier der bliver gemt time for time i SQL og jeg kunne godt tænke mig nu kun at hive de 4 første værdier i hvert døgn frem fra databasen.

I dag ser koden således ud, den henter alle værdier i den valgte periode:
        <%
        Do until Rs2.EOF
        If IsNull(Rs2("BatchId")) Then
        %>
        <TR>


        </TR>
        <%
        Else
        %>
        <TR>
            <TD><%=Rs2("BatchId") %></TD>
            <TD width="105"><%=Rs2("TimePoint") %></TD>
            <TD><%=FormatNumber(Rs2("ValueInMin"),1) %></TD>
            <TD><%=FormatNumber(Rs2("ValueInMax"),1) %></TD>
            <TD><%=FormatNumber(Rs2("ValueOutMin"),1) %></TD>
            <TD><%=FormatNumber(Rs2("ValueOutMax"),1) %></TD>
            <TD><%=FormatNumber(Rs2("ValueMin"),1) %></TD>
            <TD><%=FormatNumber(Rs2("ValueMax"),1) %></TD>
            <TD><%=FormatNumber(Rs2("ValueTime"),2) %></TD>

        </TR>
        <%
        End If
        Rs2.MoveNext
        Loop
        %>


Jeg har fundet en workaround hvor jeg indsætter en 'Rs2.Movenext' og  gentager koden i tabellerne igen, det har jeg så gjort de 4 gange og derefter indsat 20 stk 'Rs2.MoveNext' i streg... Den løsning virker sådan da, men når jeg henter data der går hen over sommer/vintertid bliver dataene forskudt en time!

I "TimePoint" variablen er der dato og tidsstempel som tekststreng i formatet "DD-MM-YYYY hh:mm:ss". Jeg kunne derfor godt tænke mig på en eller anden måde at få ændret [b]Else[/n] som ses i koden til noget i stil med (rent funktionsmæssigt):

        Else if Rs2("TimePoint") contains "00:59:00" OR "01:59:00" OR "02:59:00" OR "03:59:00"

Altså så den kun laver tabellen hvis tidsstemplet passer. Jeg er bare ikke helt sikker på hvordan jeg skal skrive det for at det er korrekt!

Håber der er nogen der kan hjælpe eller evt. har en bedre løsningsidé!
Avatar billede Slettet bruger
15. april 2016 - 13:56 #1
Den kode du har, er den kode der formaterer output. Ud kan godt afgrænse her men det rigtige er at ændre dit SELECT fra databasen.
Avatar billede geronimo Nybegynder
15. april 2016 - 14:31 #2
Det kunne selvfølgelig også være en god løsning!

Lige nu ser det sådan ud i min .sql fil:


IF OBJECT_ID('tempdb..#tmpValues') IS NOT NULL BEGIN DROP TABLE #tmpValues END;

    CREATE TABLE #tmpValues(Id INT PRIMARY KEY IDENTITY(1,1),BatchId INT, TimePoint DATETIME, RenTotTime DECIMAL(10,2));
   
    INSERT INTO #tmpValues(BatchId)
        SELECT BatchId         
        FROM Batch
        WHERE Batch.LogTime BETWEEN <StartTime> AND <StopTime>;

       
    CREATE UNIQUE INDEX I_BatcId ON #tmpValues(BatchId);

UPDATE #tmpValues SET
TimePoint = (SELECT LogTime FROM Batch WHERE Batch.BatchId = #tmpValues.BatchId),
RenTotTime = (SELECT SUM(_Float) FROM LogData WHERE LogData.BatchId = #tmpValues.BatchId AND (LogData.TagId = 25 OR LogData.TagId = 29 OR LogData.TagId = 33));


Så jeg må kunne tilføje noget i den sidste linje så den kun finder de relevante data? Noget i stil med "AND LogData.TimePoint = ????"

Jeg prøvede med AND LogData.Timepoint = "% 00:59:00" men det virkede ikke... Har også prøvet med '% 00:59:00'

Som sagt er jeg ikke ligefrem ekspert i SQL! ;)
Avatar billede Slettet bruger
18. april 2016 - 14:25 #3
Maybe something like this:

INSERT INTO #tmpValues(BatchId,TimePoint,RenTotTime)
SELECT TOP 4 Batch.BatchId, LogTime, SUM(_Float)         
FROM Batch
INNER JOIN LogData ON Batch.BatchId = LogData.BatchId
WHERE Batch.LogTime BETWEEN <StartTime> AND <StopTime>
AND (LogData.TagId = 25 OR LogData.TagId = 29 OR LogData.TagId = 33)
GROUP BY Batch.BatchId, LogTime
ORDER BY Batch.BatchId DESC;

PS. This includes the update, so no need for that and for that matter with 4 rows no need for the index neither.
Avatar billede Slettet bruger
18. april 2016 - 14:26 #4
Undskyld glemte at det var en dansk side!~)
Avatar billede geronimo Nybegynder
18. april 2016 - 16:13 #5
Det lykkedes mig at løse problemet ved at ændre:

        WHERE Batch.LogTime BETWEEN <StartTime> AND <StopTime>;

Til:

        WHERE Batch.LogTime BETWEEN <StartTime> AND <StopTime> AND DATEPART(HOUR, Batch.LogTime) BETWEEN 0 AND 3;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester