2016-08-16 2 views
1

Ich habe eine einfache Tabelle mit einer Reihe von Feldern, aber die nur 3, die mich interessieren, sind unten. Ich möchte sehen, ob die Zeit der Anzeige nach 00:00 (Mitternacht) vorbei ist;Umwandlung Zeit in Sekunden und Berechnungen basierend auf diesem neuen Feld

ID
start_advert_time
advert_duration

Das Problem ist, die oben genannten Zeitfelder nur Textzeichenfolge sind. So würde ein Tisch so aussehen.

ID start_advert_time advert_duration 
---- ----------------- --------------- 
1234 162438    0060 
1235 235900    0080 

Dies bedeutet;

ID 1234, die Zeit 16.24.38 und die Dauer beträgt 60 Sekunden
ID 1235, Zeit und Dauer 23.59.00 ist 80 Sekunden

Wie Sie die zweite Reihe über die Mitternacht gehen sehen Bereich und das ist die Reihen, die ich herausziehen möchte. Ich bin stumpf, wie das geht, aber denke, ich bin auf der richtigen Linie

Ich wollte die Zeichenfolge in Zeit konvertieren, wenn möglich. Dann füge die Sekunden hinzu, die eine "Endzeit" erzeugen würden. Wie geht das, bin ich mir nicht sicher.

SO 16.24.38 = 59.078 Sekunden + 60 Sekunden Dauer = 59138, was wiederum ist 16:25:38

SO 23.59.00 = 86.340 Sekunden + 80 Sekunden Dauer = 86420, die wiederum 00.00.20 < - über Mitternacht und was ich brauche

+0

is't zweite Reihe: 1235 235000 0080, als es 23.50 ist nicht 23.59? – Whencesoever

+0

Ja, tut mir leid, denke, jemand hat es für mich geändert – neegs

+0

Ich gab Antwort in TSQL. Ist es in Ordnung oder müssen Sie dies im Zugriff tun? – Whencesoever

Antwort

3

tl; dr

Unter der Annahme, start_advert_time immer genau 6 Zeichen enthält, sollte dies tun, was Sie wollen:

SELECT * 
FROM YourTableNameHere 
WHERE DateDiff("s", CDate(0), CDate(Format(start_advert_time, "00\:00\:00"))) + Val(advert_duration) > 86399 


Hier ist eine Direkt-Fenster-Sitzung zu erklären, wie das funktioniert.

' first transform start_advert_time so that CDate() will accept it ... 
start_advert_time = "162438" 
? Format(start_advert_time, "00\:00\:00") 
16:24:38 
? CDate(Format(start_advert_time, "00\:00\:00")) 
4:24:38 PM 

' what is the total of seconds in a day at the last second before midnight? 
? DateDiff("s", CDate(0), #23:59:59#) 
86399 

' how many seconds does start_advert_time represent? 
? DateDiff("s", CDate(0), CDate(Format(start_advert_time, "00\:00\:00"))) 
59078 

' and now how many seconds when you add advert_duration? 
advert_duration = "0060" 
? DateDiff("s", CDate(0), CDate(Format(start_advert_time, "00\:00\:00"))) + Val(advert_duration) 
59158 

' is that total seconds greater than 86399? 
? DateDiff("s", CDate(0), CDate(Format(start_advert_time, "00\:00\:00"))) + Val(advert_duration) > 86399 
False 

' now do same for second row of sample data ... 
start_advert_time = "235900" 
advert_duration = "0080" 
? DateDiff("s", CDate(0), CDate(Format(start_advert_time, "00\:00\:00"))) + Val(advert_duration) > 86399 
True 
+0

Weiß nicht, ob diese Genauigkeit hier benötigt wird, aber die Anzahl der Sekunden pro Tag ist 86400. – Gustav

+0

@Gustav Dank bemerkte ich, dass so Subistute geschafft in der 86400 – neegs

+0

@HansUp Danke für die Hilfe, aber ich bekomme einen 'Datentyp Mismatch in Kriterien Ausdruck' Ich habe überprüft, dass Startzeit immer 6 Zeichen hat, was es tut. Könnte das Problem die Dauer sein? Dies ist immer 5 Zahlen, also wäre 60 00060. Wäre das Ihr SQL – neegs

0

ZUGANG CONVERTED:

SELECT ID, start_advert_time, advert_duration 
FROM Tabela1 
WHERE (((CInt([advert_duration]))>(86400-DateDiff('s',#1/1/1999#,'1999-1-1 '+Mid([start_advert_time],1,2)+':'+Mid([start_advert_time],3,2)+':'+Mid([start_advert_time],5,2))))); 

Dies sollte funktionieren (TSQL):

SELECT [ID] 
      ,[start_advert_time] 
      ,[advert_duration] 
     FROM Time where CAST(advert_duration as int) > (86400- DATEDIFF(ss, cast('00:00:00.0000000' as time), STUFF(Stuff([start_advert_time],3,0,':'), 6,0,':'))) 
+0

Das sieht aus wie T-SQL, nicht Access SQL. –

+0

@GordThompson: Vielleicht benutzt er es, um etwas aus dem Code zu bekommen? – Whencesoever

+0

Ja, ich muss dies in Access 2010 tun. – neegs

Verwandte Themen