andinistrator1
Goto Top

SQL Abfrage Zeit: JETZT - 30 Sekunden

Hallo,
kann mir jemand bitte gerade auf die Sprünge helfen, am Beispiel.

Auftragstabelle: Welche Aufträge sind in den letzten 30 Sekunden eingegangen?

select *
from auftragstabelle
where erstelldatum ...


Vielen Dank (für's nicht lachen) ;)

Content-ID: 337919

Url: https://administrator.de/contentid/337919

Ausgedruckt am: 21.11.2024 um 22:11 Uhr

MrCount
MrCount 16.05.2017 um 10:01:59 Uhr
Goto Top
Servus,

hier oder hier solltest du geholfen werden. face-wink
emeriks
Lösung emeriks 16.05.2017 um 10:02:22 Uhr
Goto Top
Hi,
select (getdate() - '00:00:30')  

E.
Andinistrator1
Andinistrator1 16.05.2017 um 10:13:12 Uhr
Goto Top
Vielen Dank!
Genau das wollte ich, nun sehe ich das nächte Problem.

Einfachhalber gehe ich auf 5 Minuten.
Durch die UTC Zeit muss ich hier +2h angeben:
select *
from auftragstabelle
where (getdate() - '02:05:00') < erstelldatum   

Bis zum Winter funktioniert es jedenfalls ;)
emeriks
emeriks 16.05.2017 um 10:18:40 Uhr
Goto Top
Wo wird denn diese Abfrage erzeugt? Ist es möglicherweise nicht einfacher, in dieser Anwednung die Zeit zu berechnen und dann einfach diese in der Abfrage zu verwenden?
select *
from auftragstabelle
where ErstellDatum > 'BerechnetesDatum'     
Andinistrator1
Andinistrator1 16.05.2017 um 10:23:30 Uhr
Goto Top
Nein, die Anwendung ansich kann es nicht.

Wie sieht es mit richtig mit der
SYSDATETIME() 
aus?

Die SYSDATETIME, also Zeit vom Server wird automatisch umgestellt.

Vielen Dank vorab!
emeriks
emeriks 16.05.2017 um 10:34:34 Uhr
Goto Top
Nein, die Anwendung ansich kann es nicht.
Wieso nicht?
Pedant
Pedant 16.05.2017 aktualisiert um 10:42:05 Uhr
Goto Top
Hallo Andinistrator1,

Zitat von @Andinistrator1:
Nein, die Anwendung ansich kann es nicht.
Die SYSDATETIME, also Zeit vom Server wird automatisch umgestellt.
SQL-Abfragen werden immer vom SQL-Server ausgewertet, die Rückgabewerte von Datums- und Zeit-Abfragen sollten daher immer auf der Uhr des Servers basieren.

Zitat von @Andinistrator1:
Nein, die Anwendung ansich kann es nicht.
Aber sie kann von sich aus SQL?

Welche SQL-Server-Software in welcher Version betreibst Du eigentlich?

Gruß Frank
Andinistrator1
Andinistrator1 16.05.2017 um 10:45:32 Uhr
Goto Top
SQL Server 2008 (100)
Wie lautet bitte die Abfrage mit SYSDATETIME?
Andinistrator1
Andinistrator1 16.05.2017 um 10:46:23 Uhr
Goto Top
Ok ich hab mich falsch ausgedrückt.
Ich bin nicht authorisiert in der Software eine solche Abfrage/Report zu implementieren.
Pedant
Pedant 16.05.2017 um 11:08:01 Uhr
Goto Top
Hallo Andinistrator1,

Sollte das nicht einfach genauso funktionieren wie mit getdate()?
select * from auftragstabelle where (SYSDATETIME() - '02:05:00') < erstelldatum;

So wie ich das verstehe liefern die Funktionen getdate() und sysdatetime() dieselbe Zeit nur bei sysdatetime() mit ein paar Nachkommastellen mehr für die Sekunden, was Dich aber nicht interessiert.
Beides sollte die aktuelle Zeit des Servers wiedergeben.
https://docs.microsoft.com/en-us/sql/t-sql/functions/sysdatetime-transac ...

Gruß Frank
emeriks
emeriks 16.05.2017 um 11:11:18 Uhr
Goto Top
Ich bin nicht authorisiert in der Software eine solche Abfrage/Report zu implementieren.
Was machst Du Dir dann Gedanken darüber, wie die Anwendung eine solche Abfrage ausführen kann?
Andinistrator1
Andinistrator1 16.05.2017 um 11:33:12 Uhr
Goto Top
Bei SYSDATETIME passt die Konvertierung nicht:
Der Operanddatentyp datetime2 ist für den subtract-Operator ungültig.

Ich muss mal gucken.
https://technet.microsoft.com/de-de/library/ms180878(v=sql.105).aspx#Con ...
Andinistrator1
Andinistrator1 16.05.2017 um 11:35:46 Uhr
Goto Top
Anwendungsunabhänig, auf Basis SQL Server 2008 (100).
Pedant
Pedant 16.05.2017 um 12:12:02 Uhr
Goto Top
Hallo Andinistrator1,

was meinst Du mit "Anwendungsunabhänig"?

Bevor wir uns weiter mit der Syntax beschäftigen:
Wieso denkst Du dass SYSDATETIME Dir eine andere Zeit liefern würde als GETDATE und wieso denkst Du dass das eine oder andere nicht die aktuelle Zeit des Servers wäre?

Gruß Frank
Andinistrator1
Andinistrator1 16.05.2017 um 12:35:50 Uhr
Goto Top
Anwendungsunabhänig bedeutet das ich mein Problem rein mit SQL Server 2008 (100) lösen kann, also es nicht in eine Anwendung implementieren muss (die Frage kam oben).

Ersetze ich SYSDATETIME gegen GETDATE in meiner Abfrage erhalte ich den Fehler:
"Der Operanddatentyp datetime2 ist für den subtract-Operator ungültig."

Meine Spalte erstelldatum ist UTC+0, daher muss ich die letzten 5 Minuten so abfragen:
02:05:00 wegen Sommerzeit UTC+2
select * 
from auftragstabelle 
where (getdate() - '02:05:00') < erstelldatum   
Pedant
Lösung Pedant 16.05.2017 um 12:44:02 Uhr
Goto Top
Hallo Andinistrator1,

Zitat von @Andinistrator1:
Meine Spalte erstelldatum ist UTC+0
Wie wärs dann mit getutcdate()?
 select * from auftragstabelle > where (getutcdate() - '00:05:00') < erstelldatum;  
https://msdn.microsoft.com/de-de/library/ms178635.aspx
Testen kann ich's nicht mangels SQL2008.

Gruß Frank
Andinistrator1
Andinistrator1 16.05.2017 aktualisiert um 13:42:34 Uhr
Goto Top
Ich frage mich gerade warum es jetzt geht...

Es wurden Links gepostet, dessen Parameter hatte ich alle getestet.
Aktuell scheint es zu passen.

Was wurde in den letzten 5 Minuten erstellt:
select * 
from auftragstabelle
where (GETUTCDATE() - '00:05:00') < erstelldatum  

Vielen Dank!