Milli-Sekunden bestimmen... [ERLEDIGT]
Moderator: Moderatoren
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Milli-Sekunden bestimmen... [ERLEDIGT]
Hallo allerseits,
ich möchte in einem SQL-Statement einem Integer-Feld die Anzahl der Milli-Sekunden, die seit Mitternacht vergangen sind, zuweisen.
Weis jemand, wie es geht?
Uli
ich möchte in einem SQL-Statement einem Integer-Feld die Anzahl der Milli-Sekunden, die seit Mitternacht vergangen sind, zuweisen.
Weis jemand, wie es geht?
Uli
Zuletzt geändert von UliTs am Di, 04. Jun 2013 1:13, insgesamt 1-mal geändert.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2829
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 97 Mal
- Danksagung erhalten: 13 Mal
Re: Milli-Sekunden bestimmen...
Hallo, Uli -
Aber ich vermute, dass dies nicht die Antwort auf die Frage ist, die Du eigentlich stellen wolltest: "Wie komme ich an die Zeit in Millisekunden seit Mitternacht?"
Also, ich habe diese Seite gefunden, die auf zwei Windows APIs verweist:
http://stackoverflow.com/questions/1695 ... in-windows
Interessant fand ich den Hinweis auf den Unterschied zwischen GetSystemTime() und GetLocalTime().
Ich hoffe, das hilft Dir.
Code: Alles auswählen
UPDATE <Table> SET <Field> = nMilliSec
Also, ich habe diese Seite gefunden, die auf zwei Windows APIs verweist:
http://stackoverflow.com/questions/1695 ... in-windows
Interessant fand ich den Hinweis auf den Unterschied zwischen GetSystemTime() und GetLocalTime().
Ich hoffe, das hilft Dir.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Milli-Sekunden bestimmen...
int(seconds() * 1000) liefert Millisekunden, wobei die Genauigkeit nur 1/100 Sekunde beträgt.
Gruß
Hubert
Hubert
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2829
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 97 Mal
- Danksagung erhalten: 13 Mal
Re: Milli-Sekunden bestimmen...
Hallo, Hubert -
in dem Fall kann er auch direkt Seconds() speichern. Ich würde vermuten, dass es Uli auf eine höhere Genauigkeit ankommt.
in dem Fall kann er auch direkt Seconds() speichern. Ich würde vermuten, dass es Uli auf eine höhere Genauigkeit ankommt.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Milli-Sekunden bestimmen...
Er schrieb aber von einem Integerfeld. 1/100 Sekunde ist doch deutlich genauer als 1 Sekunde
Ansonsten müsste man wohl auf die Windows-API zurückgreifen. GetSystemTime() oder GetLocalTime() ... in der Struktur gibt es Millisekunden:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Ansonsten müsste man wohl auf die Windows-API zurückgreifen. GetSystemTime() oder GetLocalTime() ... in der Struktur gibt es Millisekunden:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Gruß
Hubert
Hubert
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: Milli-Sekunden bestimmen...
Das Entscheidende ist, dass ich innerhalb des SQL-Statements die Anzahl der Millisekunden, die seit Mitternacht vergangen sind, bestimmen muss.
Das SQL-Statement wird in einem Trigger auf dem Server ablaufen .
-
Da helfen Eure bisherigen Ideen leider nicht weiter .
Uli
P.S. der Server läuft unter Linux
Das SQL-Statement wird in einem Trigger auf dem Server ablaufen .
-
Da helfen Eure bisherigen Ideen leider nicht weiter .
Uli
P.S. der Server läuft unter Linux
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Milli-Sekunden bestimmen...
Ich kenne mich mit SQL nicht aus, aber ein TimeStamp müsste doch möglich sein. Je nach Auflösung hat der dann Millisekunden.
Gruß
Hubert
Hubert
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: Milli-Sekunden bestimmen...
Ja, Hubert.
Leider bekomme ich es nicht hin, den Wert in einen integer Wert umzuwandeln.
Das ist mein Problem.
Uli
Leider bekomme ich es nicht hin, den Wert in einen integer Wert umzuwandeln.
Das ist mein Problem.
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2829
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 97 Mal
- Danksagung erhalten: 13 Mal
Re: Milli-Sekunden bestimmen...
Hallo, Uli -
leider kenne ich ADS nicht. Es gibt bei MySQL einen Parameter, mit dem ein Timestamp immer dann aktualisiert wird, wenn der Datensatz geändert wird. Der Timestamp ist normalerweise in der Auflösung, wie Du sie willst.
a) kennst ADS ein entsprechendes Attribut für ein TIMESTAMP Feld?
b) wenn ja, mal ausprobieren und nach einem INSERT mal den Satz lesen und das Feld anschauen. Eventuell lässt sich der Inhalt ja auswerten.
leider kenne ich ADS nicht. Es gibt bei MySQL einen Parameter, mit dem ein Timestamp immer dann aktualisiert wird, wenn der Datensatz geändert wird. Der Timestamp ist normalerweise in der Auflösung, wie Du sie willst.
a) kennst ADS ein entsprechendes Attribut für ein TIMESTAMP Feld?
b) wenn ja, mal ausprobieren und nach einem INSERT mal den Satz lesen und das Feld anschauen. Eventuell lässt sich der Inhalt ja auswerten.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Milli-Sekunden bestimmen...
Laut Seite 122 im "Advantage Database Server 9 Programierhandbuch" (das von der Devcon) verarbeitet der ADS Zeitstempel, die "optional die Angabe der Millisecunden enthalten" ...
Beispiel (im Buch): '2008-07-25 13:30:23.100'
Frage wieviel Bytes hat das Feld das du als "Integer" bezeichnest ?
86400 Sekunden hat ein Tag maximal, 86.400.000 Millisekunden => 32 Bit Long Integer, also Standard auf 32 Bit Systemen im Speicher, eventuell aber nicht in der Datenbank
Auf Seite 360 wird Integer mit 4 Byte (LONG) angegeben, aber scheinbar nicht in allen DBF ...
und auf Seite 362 gibt es ein "ModTime" (nicht in DBF ?), was einem schreibgeschützen Zeitstempel entspricht. Scheinbar wird dieser automatisch ausgefüllt.
NOW() liefert übrigens den aktuellen Zeitstempel (Seite 364 ...)
Beispiel (im Buch): '2008-07-25 13:30:23.100'
Frage wieviel Bytes hat das Feld das du als "Integer" bezeichnest ?
86400 Sekunden hat ein Tag maximal, 86.400.000 Millisekunden => 32 Bit Long Integer, also Standard auf 32 Bit Systemen im Speicher, eventuell aber nicht in der Datenbank
Auf Seite 360 wird Integer mit 4 Byte (LONG) angegeben, aber scheinbar nicht in allen DBF ...
und auf Seite 362 gibt es ein "ModTime" (nicht in DBF ?), was einem schreibgeschützen Zeitstempel entspricht. Scheinbar wird dieser automatisch ausgefüllt.
NOW() liefert übrigens den aktuellen Zeitstempel (Seite 364 ...)
Gruß
Hubert
Hubert
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: Milli-Sekunden bestimmen...
Hallo Georg und Hubertus,
vielen Dank für Eure Ideen.
Klar: das Beste ist, wenn man direkt ein Feld vom Typ "Zeitstempel" hat! Aber das liegt in meinem Fall nun einmal aus diversen Gründen nicht vor (die Schnittstelle, die ich benutze, unterstützt die ADT-Feld-Typen "Time" bzw. "TimeStamp" nicht bzw. nicht korrekt). Der Feld-Typ "Time" würde ansonsten exakt das machen, was ich möchte...
Es geht mir also nicht darum, wie kann ich die Tabelle verändern, damit es ohne Typumwandlung klappt .
Ich suche nach einer Lösung, wie ich bei einer ADT-Tabelle durch einen Trigger in eine Feldvariable vom Typ Integer (ja, Hubert: es stimmt, Integer-Felder haben bei ADT-Tabellen 4 Byte ) die aktuelle Millisekundenanzahl seit Mitternacht reinbekomme.
Ich habe auch an die Benutzung von Now() oder CurTime() oder ähnlichem gedacht. Ich habe aber keine Lösung gefunden, wie ich daraus die Millisekunden durch Scalarfunktionen extrahieren kann .
Ich bin überzeugt, es gibt eine ganz einfache Lösung. Nur kommen wir nicht drauf...
Uli
P.S. Ich habe ADT-Tabellen und keine DBF-Tabellen
vielen Dank für Eure Ideen.
Klar: das Beste ist, wenn man direkt ein Feld vom Typ "Zeitstempel" hat! Aber das liegt in meinem Fall nun einmal aus diversen Gründen nicht vor (die Schnittstelle, die ich benutze, unterstützt die ADT-Feld-Typen "Time" bzw. "TimeStamp" nicht bzw. nicht korrekt). Der Feld-Typ "Time" würde ansonsten exakt das machen, was ich möchte...
Es geht mir also nicht darum, wie kann ich die Tabelle verändern, damit es ohne Typumwandlung klappt .
Ich suche nach einer Lösung, wie ich bei einer ADT-Tabelle durch einen Trigger in eine Feldvariable vom Typ Integer (ja, Hubert: es stimmt, Integer-Felder haben bei ADT-Tabellen 4 Byte ) die aktuelle Millisekundenanzahl seit Mitternacht reinbekomme.
Ich habe auch an die Benutzung von Now() oder CurTime() oder ähnlichem gedacht. Ich habe aber keine Lösung gefunden, wie ich daraus die Millisekunden durch Scalarfunktionen extrahieren kann .
Ich bin überzeugt, es gibt eine ganz einfache Lösung. Nur kommen wir nicht drauf...
Uli
P.S. Ich habe ADT-Tabellen und keine DBF-Tabellen
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Milli-Sekunden bestimmen...
für PostgreSQL würde man so was als Query verwendenUliTs hat geschrieben:Leider bekomme ich es nicht hin, den Wert in einen integer Wert umzuwandeln.
Code: Alles auswählen
SELECT EXTRACT(MILLISECONDS FROM TIME ’17:12:28.5’);
SELECT EXTRACT(MICROSECONDS FROM TIME ’17:12:28.5’);
gruss by OHR
Jimmy
Jimmy
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: Milli-Sekunden bestimmen...
Danke Jimmy,
Extract gibt es zumindest beim ADS 10.1 nicht in Verbindung mit Millisekunden, aber durch das Ausprobieren und Nachschauen bin ich auf die Funktion Frac_Second() gestoßen. Diese liefert die Millisekunden eines Zeitstempels als Integer-Wert
Und damit konnte ich dann relativ schnell eine Lösung für den ADS bilden:
Ich habe es direkt umgesetzt und ich muß sagen: die Ausführungsgeschwindigkeit liegt im Micro-Sekundenbereich, also Top! .
Nochmals Danke an alle für die investierte Zeit
Uli
Extract gibt es zumindest beim ADS 10.1 nicht in Verbindung mit Millisekunden, aber durch das Ausprobieren und Nachschauen bin ich auf die Funktion Frac_Second() gestoßen. Diese liefert die Millisekunden eines Zeitstempels als Integer-Wert
Und damit konnte ich dann relativ schnell eine Lösung für den ADS bilden:
Code: Alles auswählen
SELECT ( ( Hour( Now() )*60+Minute( Now() ) )*60+Second( Now() ) )*1000+Frac_Second( Now() ) FROM System.IOTA;
Ich habe es direkt umgesetzt und ich muß sagen: die Ausführungsgeschwindigkeit liegt im Micro-Sekundenbereich, also Top! .
Nochmals Danke an alle für die investierte Zeit
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- nightcrawler
- 1000 working lines a day
- Beiträge: 653
- Registriert: Di, 24. Apr 2012 16:33
- Wohnort: 72184 Weitingen
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 96 Mal
- Kontaktdaten:
Re: Milli-Sekunden bestimmen...
auch wenn es schon erledigt ist: schau mal die funktion TimeStampDiff an. Damit kann die Differenz zweier Zeitstempel auch in msec (SQL_TSI_FRAC_SECOND) ausgerechnet werden. Müsste dann irgendwie so lauten:
Code: Alles auswählen
timestampdiff(SQL_TSI_FRAC_SECOND, cast(curdate() as SQL_TIMESTAMP), now())
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: Milli-Sekunden bestimmen... [ERLEDIGT]
Hallo Joachim,
ich bin gerade mal wieder hierübergestolpert und habe Deinen Vorschlag umgesetzt und getestet:
Klappt wunderbar .
Danke
ich bin gerade mal wieder hierübergestolpert und habe Deinen Vorschlag umgesetzt und getestet:
Code: Alles auswählen
select timestampdiff(SQL_TSI_FRAC_SECOND,cast(curdate() as SQL_TIMESTAMP),now()) MilliSekunden
from system.iota
Danke
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück