Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst SQL auf AS400 if-Abfrage in WHERE?

Mitglied: leanderchen

leanderchen (Level 1) - Jetzt verbinden

13.12.2006, aktualisiert 14.12.2006, 12995 Aufrufe, 7 Kommentare

Hallo zusammen,
ich habe ein Problem mit einem SQL-Statement, per iSeries Navigator auf einer AS400 abgesetzt, und zwar brauche ich sinngemäß eine if-Abfrage im WHERE-Teil.

Das Problem ist folgendes: Es sollen nur Datensätze gefunden werden, die in DATAUSMTG entweder 0 stehen haben oder ein Datum, das größer ist als das heutige Datum.

Nachdem ich nun schon eine Weile verzweifelt gegoogelt und einige Foren durchforscht habe, hoffe ich, hier kann mir jemand helfen.

Mein WHERE-Teil sieht zur Zeit (gekürzt auf die relevante Stelle) so aus:

WHERE (DATAUSMTG = 0 OR ((DATAUSMTG <> 0) AND DATE(substr(Digits(DATAUSMTG), 7, 2) || '.' || Substr(digits(DATAUSMTG),5,2) || '.' || Substr(digits(DATAUSMTG), 1, 4)) > date(now()))))

Solange in DATAUSMTG ein Datum steht, funktioniert das bestens. Steht dort aber 0, fällt das OR auf die Nase. Klar, da aus 0 kein Datum gebaut werden kann.

Ich dachte eigentlich, dass durch die Klammersetzung der hintere Teil des OR einfach ignoriert wird, aber dem ist wohl nicht so.

Hat jemand eine Idee?

Danke schon mal und Gruß
Jutta
Mitglied: Biber
13.12.2006 um 17:13 Uhr
Nachfrage, leanderchen,

Du bist Dir sicher, dass DATAUSMTG tatsächlich ein numerisches Feld und kein CHAR-Feld?
Und dort tatsächlich (numerisch) 0 steht und nicht NULL?

Grüße
Biber
Bitte warten ..
Mitglied: leanderchen
13.12.2006 um 17:35 Uhr
Hallo Biber,

ob das ein CHAR-Feld ist, kann ich leider nicht prüfen, da ich ja nur lesend auf die AS400 zugreifen kann.

NULL steht dort m. E. nie drin, da die Abfrage bisher (nur mit WHERE DATAUSMTG = 0, was bis heute morgen auch ausreichend war) immer gut funktioniert hat.

Seit heute weiß ich allerdings, dass auch Datensätze angezeigt werden sollen, bei denen DATAUSMTG anstelle der 0 ein Datum größer als das heutige Datum enthält.

Ich habe in der Zwischenzeit auch schon versucht, beides in einen String umzuwandeln, um die dann zu vergleichen, aber ich kann weder now() noch date(now()) in einen String umwandeln
Bitte warten ..
Mitglied: Biber
13.12.2006 um 19:17 Uhr
Hm,
nicht, dass ich verstehen würde, was da schräg läuft, aber umformen könnten wir es...
01.
... 
02.
WHERE ( DATAUSMTG = 0 
03.
OR  
04.
DATAUSMTG > Int(replace(char(date(now()), ISO),'-','')) )  
Date(now(), ISO) bzw. bei mir Date(current date, ISO) liefert das Datum im Format 2006-12-14.
char(davon)-----> '2006-12-14' (Char)
replace(char(davon),"-", "" ) -------->'20061214' (Char)
int(replace(char(davon),"-","")) --------> 20061214 (integer)

HTH
Biber
Bitte warten ..
Mitglied: leanderchen
14.12.2006 um 08:19 Uhr
Hallo Biber,

erst mal Danke für Deine Hilfe!

Aber der Spaß geht weiter, denn die AS400 kennt replace nicht. Oder zumindest kommt im Navigator die Meldung "REPLACE der Art *N in *LIBL wurde nicht gefunden."

Hast Du noch eine Idee, wie man den Wert aus DATAUSMTG in ein Datum umformen kann? Denn vielleicht geht es ja doch irgendwie in dieser Richtung. Obwohl ich das ja auch schon versucht hatte und die AS400 die Fehlermeldung brachte, dass man weder now() noch date(now()) per < oder > vergleichen könnte...
Bitte warten ..
Mitglied: leanderchen
14.12.2006 um 09:12 Uhr
Hallo Biber,

ich habe die Lösung inzwischen gefunden. Warum einfach, wenn es auch kompliziert geht???

So geht es:
<p>
WHERE (
DATAUSMTG = 0 OR
DATAUSMTG > int(substr(char(date(now())), 1, 4) ||
substr(char(date(now())), 6, 2) ||
substr(char(date(now())), 9, 2))
)
</p>
Trotzdem noch einmal vielen Dank für Deine Hilfe. Schließlich hast Du mir geholfen, das Brett vor meinem Kopf zu entfernen

Gruß
Jutta
Bitte warten ..
Mitglied: Biber
14.12.2006 um 09:28 Uhr
sorry, leanderchen,

so genau hab ich den Umfang der Skalar-Funktionen der AS400 nicht im Kopf.
Wusste nicht, dass REPLACE() nicht dabei ist...

Also bitte auch die folgende Alternative erstmal nur als Skizze nehmen:
01.
...WHERE (  
02.
DATAUSMTG = 0 
03.
OR  
04.
DATAUSMTG > Int(Substr(char(date(now()), ISO),'-',''), 1, 4) || 
05.
                Substr(char(date(now()), ISO),'-',''), 6, 2) || 
06.
                Substr(char(date(now()), ISO),'-',''), 9, 2)) 
07.
 )  
Falls die AS400 auch den Parameter "ISO" bei der DATE()-Function nicht kennt, dann bitte den Wert der Function Date(now()) so nehmen wie er ist und -sollte er im EUR-Format kommen, die Substr()-Arie von Konvertiere-YYYY-MM-DD-nach-Integer auf Konvertiere-TT.MM.JJJJ-nach-Integer umdrehen.

Ich würde aber auf jeden Fall den (gültigen) Date(now())-Wert nach Integer konvertieren statt zu versuchen, den ungeprüften DATAUSMTG-Wert in ein Datum umzuwandeln.

HTH
Biber

[Edit]
Da haben wir über Kreuz getippt--- vergiss es einfach
[/Edit]
Bitte warten ..
Mitglied: leanderchen
14.12.2006 um 12:58 Uhr
Nachtrag!

Da auch noch ein Unterschied besteht zwischen einem Zugriff auf AS400 per iSeries Navigator und dem Zugriff per ODBC und einem Java-Programm (und da, wie ich inzwischen weiß, DATAUSMTG ein decimal(8) ist), muss noch etwas geändert werden:

WHERE ((DATAUSMTG = 0) OR
(cast(DATAUSMTG as varchar(8)) > (substr(char(date(now())), 1, 4) || substr(char(date(now())), 6, 2) || substr(char(date(now())), 9, 2))))

Gruß
Jutta
Bitte warten ..
Ähnliche Inhalte
Datenbanken
IF Abfrage im SELECT Oracle SQL
gelöst Frage von 94451Datenbanken2 Kommentare

Hallo , ist es möglich im SELECT eine IF-Abfrage machen (bin auch offen für eine andere Lösung). >SELECT ID, ...

Datenbanken

SQL - Abfragen - Mehrere Tabellen - Problem WHERE-Filter

gelöst Frage von Andy1987Datenbanken12 Kommentare

Guten Morgen, ich muss mich derzeit mit SQL-Abfragen rumschlagen, um unsere Inventarisierung etwas Übersichtlicher zu gestallten. Mein Problem ist ...

Batch & Shell

Fehler in IF Abfrage

gelöst Frage von anmelderBatch & Shell4 Kommentare

Hallo, folgender Code macht Probleme: Die Zahl muß immer zweistellig eingegeben werden damit die Eingabe einheitlich ist, die 0 ...

Batch & Shell

Powershell IF Abfrage Vergleichsoperatoren

gelöst Frage von PeterzBatch & Shell4 Kommentare

Hallo, ich möchte in einer IF Abfrage Vergleichsoperatoren verknüpfen und bekomme es nicht hin. Es sollte so aussehen: IF ...

Neue Wissensbeiträge
Microsoft

Neuigkeiten zu Server und Office 365 was läuft mit was und was nicht

Tipp von AlFalcone vor 1 TagMicrosoft4 Kommentare

Da diese Infos scheinbar unerwünscht sind, habe ich diese wider gelöscht.

Speicherkarten

Neuer Speicherkartentyp - zunächst nur für Huawei-Smartphones (künftig auch für Notebooks u. Tablets?)

Tipp von VGem-e vor 1 TagSpeicherkarten1 Kommentar

Servus, als ob das "Chaos" i.S. Speicherkarten noch nicht groß genug wäre?! Evtl. kommt dieser neue Kartentyp bald auch ...

Sicherheit

Diverse D-Link-Router durch drei Schwachstellen kompromittierbar

Information von kgborn vor 1 TagSicherheit

Hat jemand D-Link-Router in Verwendung? Einige Modelle sind sicherheitstechnisch offen wie ein Scheunentor. Äußerst unschöne Sache, aber nichts neues ...

Hardware

100.000 Mikrotik-Router ungefragt von Hacker abgesichert

Information von 7Gizmo7 vor 2 TagenHardware2 Kommentare

Hallo zusammen, da hier ja öfters mal von Mikrotik gesprochen wird. Trotz Updates klafft eine Sicherheitslücke in Hundertausenden Mikrotik-Routern. ...

Heiß diskutierte Inhalte
Sicherheitsgrundlagen
EuGH-Urteil - Internetanschluss für die ganze Familie - Filesharer haften trotzdem
Frage von StefanKittelSicherheitsgrundlagen40 Kommentare

Hallo, In diesem Artikel geht es darum, dass Jemand aus der Familie ein Hörbuch illegal hochgeladen hat. Der Vater ...

Apple
MacBook Pro 2018 mit 8 GB oder 16 GB
Frage von SysAdm81Apple25 Kommentare

Hallo zusammen, ich steh vor der Überlegung mir ein MacBook Pro 13 (2018) zu kaufen. Bzgl. SSD habe ich ...

Off Topic
SysAdmin im öffentlichen Dienst - jemand Erfahrungen?
Frage von JohnDorianOff Topic19 Kommentare

Hallo zusammen, hat jemand Erfahrung wie es so ist als SysAdmin im öffentlichen Dienst (Landkreis) im Südwesten der Republik ...

TK-Netze & Geräte
Low budget TK-Anlage für KMU
Frage von HeinklugTK-Netze & Geräte16 Kommentare

Hallo Admins, ich bin auf der Suche nach eine kostengünstigen Telefonanlage für mein kleines Büro mit 4-5 Mitarbeitern. Dabei ...