Schrift
[thread]12355[/thread]

SQL: Alter eines timestamps ermitteln



<< >> 8 Einträge, 1 Seite
pktm
 2008-08-14 23:49
#113509 #113509
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

edit: gesucht: SQL oder PL/SQL

Ich komme mal wieder nicht weiter. Ich arbeite hier an einer Oracle-Datenbank, und müsste zu einem gegebenen Timestamp wissen, ob der schon älter als X Minuten ist. (X = beliebiger integer).

Aber, wie zum Teufel geht das? Ich hab mich ja totgesucht und finde keine Funktion dafür.
ich weiß zwar mittlerweile, dass man Timestamps voneinander abziehen kann, sie addieren kann, dass man Intervalle erstellen kann, aber zum eigentlichen Vergleich hab ich nix gefunden. Es muss doch möglich sein, zu sagen, ob das Resultat einer Subtraktion zweier Intervalle / Timestamps größer als X Minuten ist?

Weiß wer Rat?

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
Gast Gast
 2008-08-15 00:23
#113513 #113513
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl
use strict;
use warnings;

my $time_first=time();

sleep(120);# zwei Minuten warten

my $time_later=time();

my $time_diff=$time_later-$time_first;
$time_diff /= 60; # timestamps sind in Sekunden.

print "Program schlief von ".localtime($time_fist)." bis ".localtime($time_later).", also $ime_diff Minuten\n";


Wo ist das Problem?
GwenDragon
 2008-08-15 00:24
#113514 #113514
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
pktm
 2008-08-15 00:24
#113515 #113515
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Ahso ja ... :>
Ich brauch dazu ein passendes SQL-Statement, wiel ich das in der Datenbank berechnen möchte, nicht außerhalb.
Ich kann das leider nur innerhalb der Datenbank berechnen (Vorgabe).

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
Gast Gast
 2008-08-15 00:28
#113516 #113516
Ich nutze nur PostrgeSQL und da würde ich eine Funktion in pl/perl schreiben...
PL/SQL selber habe ich nie genutzt :/
pktm
 2008-08-15 00:33
#113517 #113517
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Gast+2008-08-14 22:28:30--
Ich nutze nur PostrgeSQL und da würde ich eine Funktion in pl/perl schreiben...
PL/SQL selber habe ich nie genutzt :/


pl/perl würde auch gehen. Aber das kann ich nicht, daher siehts es dann mit der Wartbarkeit nicht gut aus :-s

Hier jetzt meine "Lösung", sofern man sich traut, diesen massiven Workaround der außerdem nicht so 100%ig funktioniert als solche zu bezeichnen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
create or replace procedure "KILL_OVERDUE_BAGGAGE"
is
minute number(10);
begin
for r in (
SELECT
BAGGAGE_ID, SUBSTR((systimestamp - INSERTION_DATE),15,2) as minute
FROM
dual, baggage, shelves
WHERE
baggage_id = contains_baggage_id
)
loop
IF r.minute > 2 THEN
null;
END IF;
end loop;

END;
http://www.intergastro-service.de (mein erstes CMS :) )
murphy
 2008-08-15 00:49
#113518 #113518
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Also unter PostgreSQL 8.3 geht bei mir zum Beispiel folgendes:
[sql]SELECT now() - t > '2 minutes' FROM foobar;[/sql]

Ich weiß aber nicht, wie kompatibel Oracle und PostgreSQL in diesem Punkt sind.
When C++ is your hammer, every problem looks like your thumb.
Gast Gast
 2008-08-15 00:57
#113519 #113519
Schau mal hier http://www.psoug.org/reference/timestamp.html unter "Interval" (recht weit unten) nach. Das sollte dir helfen. :-)
<< >> 8 Einträge, 1 Seite



View all threads created 2008-08-14 23:49.