Dissektion 0 Geschrieben 3. Februar 2016 Melden Teilen Geschrieben 3. Februar 2016 (bearbeitet) Guten Morgen Community! Mein Name ist Rene und ich bin Clientmanager in einem größeren Unternehmen. Ich versuche gerade eine Abfrage zu schreiben, welche mir einen Datum-wert vergleicht. Hierfür hole ich mir einen Wert aus der Windows Registry "Last Windows Update" und übergebe diesen in die gleichlautende Variable. Mit dieser Variable arbeite ich jetzt weiter und vergleiche diesen Wert mit einem von mir vorgegebenen Datum (jjjj-mm-dd), das Statement sieht wie folgt aus: SELECT * from machine WHERE ( ( ( SELECT vars.value FROM vars WHERE vars.guid_link = machine.guid AND ( vars.name = 'Last Windows Update' AND vars.scope = '__MACHINE__' AND vars.category = 'Info') ) < '2015-12-25') ) Das ist aber insofern unpraktisch, da ich hier das Datum immer händisch pflegen muss. Wie könnte ich den zweiten select Befehl definieren, dass das Datum der Variable "Last Windows Update" mit dem Wert 36 --also älter als 36 Tage-- überprüft wird?Ich hoffe mein Wunsch ist verständlich!Grüße, Rene bearbeitet 3. Februar 2016 von Dissektion Zitieren Link zu diesem Kommentar
Dunkelmann 96 Geschrieben 3. Februar 2016 Melden Teilen Geschrieben 3. Februar 2016 Moin, vielleicht hilft Dir das weiter: http://sqlandme.com/2011/05/20/how-to-addsubtract-days-from-a-date-tsql/ Zitieren Link zu diesem Kommentar
Dissektion 0 Geschrieben 3. Februar 2016 Autor Melden Teilen Geschrieben 3. Februar 2016 (bearbeitet) Hi! Also ich muss gestehen, dass ich auf dem Gebiet ziemlicher Leihe bin. Ich komm mit deinem Vorschlag deshalb schon nicht weiter, weil ich diesen Datumwert ja aus der Variable hole und jetzt nicht weiß, wie ich weiter damit arbeiten kann. Dazu muss ich noch sagen, dass ich mir diese Abfrage nicht selber einfallen habe lassen, sondern sie mir mithilfe unserer Clientmanagementsoftware (Baramundi) zusammengeklickt habe :D Deshalb bräuchte ich hier noch einen Funken (Verstand) um das Feuer entzünden zu können :rolleyes: Grüße, Rene bearbeitet 3. Februar 2016 von Dissektion Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 3. Februar 2016 Melden Teilen Geschrieben 3. Februar 2016 Anstatt < '2015-12-25' mußt Du mit GETDATE() – 36 an der Stelle arbeiten. BTW: Es heißt Laie, ausleihen ist etwas anderes. Zitieren Link zu diesem Kommentar
Dissektion 0 Geschrieben 3. Februar 2016 Autor Melden Teilen Geschrieben 3. Februar 2016 Das habe ich versucht WHERE ( ( ( SELECT vars.value FROM vars WHERE vars.guid_link = machine.guid AND ( vars.name = 'Last Windows Update' AND vars.scope = '__MACHINE__' AND vars.category = 'Info') ) GETDATE() – 36) ) das bringt mir aber folgenden Fehler Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 3. Februar 2016 Melden Teilen Geschrieben 3. Februar 2016 da fehlt's Kleiner-Zeichen, würde ich sagen! Und die Klammern passen m.E. auch nicht ganz. Zitieren Link zu diesem Kommentar
Dissektion 0 Geschrieben 3. Februar 2016 Autor Melden Teilen Geschrieben 3. Februar 2016 Ne, mit dem < Zeichen gehts auch nicht. Die Klammern hat mir ja das Studio zusammengeklickt. Kann es sein, dass dieser Wert der hier über die Variable ausgelesen wird nochmal mit einem CONVERT behandelt werden muss? Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 3. Februar 2016 Melden Teilen Geschrieben 3. Februar 2016 Ich werde aus dem Subselect nicht schlau. Eine Where-Bedingung muss aus dem gegebenen Result-Set (Select * from machine) etwas filtern. Dazu muss man eine Filterbedingung setzen. Die finde ich aber nicht. Richtig wäre z.B.: Where machine.irgendwas in (select irgendwas.irgendwas from ... where...) Wobei man sich das Subselect u.U. auch sparen kann. Wir wissen ja nicht genau, was gefiltert werden soll. Zitieren Link zu diesem Kommentar
Dissektion 0 Geschrieben 3. Februar 2016 Autor Melden Teilen Geschrieben 3. Februar 2016 (bearbeitet) Ich kann nur versuchen es verständlicher zu machen. Ein Script liest mir das Datum aus der Registry aus und übergibt diesen Wert (jjjj-mm-dd) an eine Variable die den Typ Date besitzt. In der geposteten Abfrage wird im Prinzip nur der Wert aus der Variable gelesen SELECT vars.value FROM vars WHERE vars.guid_link = machine.guid AND ( vars.name = 'Last Windows Update' AND vars.scope = '__MACHINE__' AND vars.category = 'Info' Ich weiß ja nicht, ob dieses SQL Statement überhaupt weiß, ob der vars.value vom Typ Date ist? Allerdings vergleiche ich den Wert ja erfolgreich mit < 'jjjj-mm-dd' bearbeitet 3. Februar 2016 von Dissektion Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 3. Februar 2016 Melden Teilen Geschrieben 3. Februar 2016 Das Select-Statement ist für sich genommen ungültig (machine.guid). Wichtig ist: ein Subselect muss sich auch alleine ausführen lassen. Fange am Bester hier an zu lesen: http://www.w3schools.com/sql/sql_select.asp Hier geht es ein wenig um Date-Operations: http://www.w3schools.com/sql/sql_dates.asp Zitieren Link zu diesem Kommentar
Lian 2.421 Geschrieben 3. Februar 2016 Melden Teilen Geschrieben 3. Februar 2016 Was ist das für eine Datenbank? Selbst gebaut...? Interessant für Datumswerte ist der Feldtyp - ist das Datum als ein Feld vom Typ date oder datetime etc. definiert? Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 3. Februar 2016 Melden Teilen Geschrieben 3. Februar 2016 Ich kann nur versuchen es verständlicher zu machen. Ein Script liest mir das Datum aus der Registry aus und übergibt diesen Wert (jjjj-mm-dd) an eine Variable die den Typ Date besitzt. In der geposteten Abfrage wird im Prinzip nur der Wert aus der Variable gelesen SELECT vars.value FROM vars WHERE vars.guid_link = machine.guid AND ( vars.name = 'Last Windows Update' AND vars.scope = '__MACHINE__' AND vars.category = 'Info' Ich weiß ja nicht, ob dieses SQL Statement überhaupt weiß, ob der vars.value vom Typ Date ist? Allerdings vergleiche ich den Wert ja erfolgreich mit < 'jjjj-mm-dd' Es wäre vermutlich zielführender für dich, du sprichst den Hersteller des Systems, als Baramundi selbst an. Die können dir sicherlich viel schneller helfen und wissen was ihre Datenbank da genau haben möchte. Zitieren Link zu diesem Kommentar
Dissektion 0 Geschrieben 3. Februar 2016 Autor Melden Teilen Geschrieben 3. Februar 2016 Hallo! @Sunny Da hab ich schon ein Ticket offen, allerdings ist dort wegen Krankheit nicht so schnell mit einer Lösung zu rechnen. Ich dachte, dass das nicht so die Hexerei sein kann. Unsere DBAs haben auch keine Zeit für mich, wollen, dass ich einen Termin vereinbare :cry: @Lian Die Variable in der der Wert übergeben wird ist vom Typ Date, siehe Screenshot @zahni Ich guck mir das mal an, wie aber bereits gesagt, sind meine Kenntnisse nicht überragend. Grüße, Rene Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 3. Februar 2016 Melden Teilen Geschrieben 3. Februar 2016 Unsere DBAs haben auch keine Zeit für mich, wollen, dass ich einen Termin vereinbare :cry: Dann mach halt einen Termin für heute um 16 Uhr aus, wo ist das Problem? :) Zitieren Link zu diesem Kommentar
Dissektion 0 Geschrieben 3. Februar 2016 Autor Melden Teilen Geschrieben 3. Februar 2016 Dann mach halt einen Termin für heute um 16 Uhr aus, wo ist das Problem? :) Haha ... Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.