Zum Inhalt wechseln


Foto

Hilfe bei SQL Statement (Date)

MS SQL

  • Bitte melde dich an um zu Antworten
15 Antworten in diesem Thema

#1 Dissektion

Dissektion

    Newbie

  • 7 Beiträge

 

Geschrieben 03. Februar 2016 - 07:52

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 von Dissektion, 03. Februar 2016 - 08:04.


#2 Dunkelmann

Dunkelmann

    Expert Member

  • 1.862 Beiträge

 

Geschrieben 03. Februar 2016 - 07:59

Moin,

 

vielleicht hilft Dir das weiter:

http://sqlandme.com/...om-a-date-tsql/


Keep It Small - Keep It Simple


#3 Dissektion

Dissektion

    Newbie

  • 7 Beiträge

 

Geschrieben 03. Februar 2016 - 08:24

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 von Dissektion, 03. Februar 2016 - 08:26.


#4 Sunny61

Sunny61

    Expert Member

  • 22.247 Beiträge

 

Geschrieben 03. Februar 2016 - 08:35

Anstatt < '2015-12-25' mußt Du mit GETDATE() 36 an der Stelle arbeiten.

 

BTW: Es heißt Laie, ausleihen ist etwas anderes.


Gruppenrichtlinien: http://www.gruppenrichtlinien.de/

#5 Dissektion

Dissektion

    Newbie

  • 7 Beiträge

 

Geschrieben 03. Februar 2016 - 08:56

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

 

 

Angehängte Dateien



#6 Cybquest

Cybquest

    Expert Member

  • 1.888 Beiträge

 

Geschrieben 03. Februar 2016 - 09:05

da fehlt's Kleiner-Zeichen, würde ich sagen! Und die Klammern passen m.E. auch nicht ganz.


My name is Frank, you can say you to me.

#7 Dissektion

Dissektion

    Newbie

  • 7 Beiträge

 

Geschrieben 03. Februar 2016 - 09:25

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?



#8 zahni

zahni

    Expert Member

  • 16.520 Beiträge

 

Geschrieben 03. Februar 2016 - 09:36

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.


Wen du nicht mit Können beeindrucken kannst, den verwirre mit Schwachsinn!


#9 Dissektion

Dissektion

    Newbie

  • 7 Beiträge

 

Geschrieben 03. Februar 2016 - 09:43

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 von Dissektion, 03. Februar 2016 - 09:43.


#10 zahni

zahni

    Expert Member

  • 16.520 Beiträge

 

Geschrieben 03. Februar 2016 - 09:51

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.../sql_select.asp

 

Hier geht es ein wenig um Date-Operations:

 

http://www.w3schools...l/sql_dates.asp


Wen du nicht mit Können beeindrucken kannst, den verwirre mit Schwachsinn!


#11 Lian

Lian

    Moderator

  • 19.991 Beiträge

 

Geschrieben 03. Februar 2016 - 09:58

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?


–––
Microsoft MVP [Cloud and Datacenter Management - High Availability]

#12 Sunny61

Sunny61

    Expert Member

  • 22.247 Beiträge

 

Geschrieben 03. Februar 2016 - 10:10

 

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.


Gruppenrichtlinien: http://www.gruppenrichtlinien.de/

#13 Dissektion

Dissektion

    Newbie

  • 7 Beiträge

 

Geschrieben 03. Februar 2016 - 11:10

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

Angehängte Dateien



#14 Sunny61

Sunny61

    Expert Member

  • 22.247 Beiträge

 

Geschrieben 03. Februar 2016 - 11:54

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? :)
Gruppenrichtlinien: http://www.gruppenrichtlinien.de/

#15 Dissektion

Dissektion

    Newbie

  • 7 Beiträge

 

Geschrieben 03. Februar 2016 - 12:16

Dann mach halt einen Termin für heute um 16 Uhr aus, wo ist das Problem? :)

 

Haha ...





Auch mit einem oder mehreren der folgenden Tags versehen: MS SQL