-
Datum in SQL Funktion prüfen
Hallo Gemeinde!
Wie kann ich denn am besten/einfachsten Fehler in einer SQL-Funtion abfangen?
Habe mir eine Funktion gebastelt, die aus 2 Numerichen 8selligen Felder (welche je mit einem gültigen Datum gefüllt sein sollten) die Differenz in Tagen aus gibt.
Steht nun aber in einem Feld 20140931 fällt die Funtion auf die Nase.
Ich würde nun gern in diesem Fall das die Funktion 0 oder 999999 zurück gibt.
PHP-Code:
Create Function MyLib/DAT_Diff( Dat1 Dec(8, 0), Dat2 Dec(8, 0) )
Returns Decimal (6, 0)
Language sql
Return
Days(Date(SubStr(Digits(Dat1), 1, 4) Concat '-' Concat
SubStr(Digits(Dat1), 5, 2) Concat '-' Concat
SubStr(Digits(Dat1), 7, 2) ))
-Days(Date(SubStr(Digits(Dat2), 1, 4) Concat '-' Concat
SubStr(Digits(Dat2), 5, 2) Concat '-' Concat
SubStr(Digits(Dat2), 7, 2) ))
Gruß
Ronald
-
Meines Wissens geht das mit
declare EXIT HANDLER FOR SQLEXCEPTION return 0;
Wer andren eine Bratwurst brät, hat ein Bratwurstbratgerät!
-
Danke!
Das war es
PHP-Code:
Create Function MyLib/DAT_Diff( Dat1 Dec(8, 0), Dat2 Dec(8, 0) )
Returns Decimal (6, 0)
Language sql
Begin
declare EXIT HANDLER FOR SQLEXCEPTION return 0;
Return
Days(Date(SubStr(Digits(Dat1), 1, 4) Concat '-' Concat
SubStr(Digits(Dat1), 5, 2) Concat '-' Concat
SubStr(Digits(Dat1), 7, 2) ))
-Days(Date(SubStr(Digits(Dat2), 1, 4) Concat '-' Concat
SubStr(Digits(Dat2), 5, 2) Concat '-' Concat
SubStr(Digits(Dat2), 7, 2) ));
end
-
Das geht auch einfacher:
days(date(char(Dat1 * 1000000))) - days(date(char(Dat2 * 1000000)))
Die Funktion Date erlaubt auch einen Timestamp in der Form JJJJMMTTHHMMSS.
-
Gut werde ich umbauen.
(aber das Beispiel hatte ich auch mal von dir ;-) )
http://newsolutions.de/forum-systemi...erenz-in-Tagen
-
Man lernt nie aus und SQL wird von Release zu Release besser. Das ISO-Datum galt noch für V4!
-
Nachtrag:
Ich habe mir mal eine VBA-ähnliche Funktion gebaut:
DATESERIAL(Year as integer, Month as Integer, Day as integer) as Date
return date('0001-01-01') + (year - 1) Years + (Month - 1) months + (day - 1) days;
Fehlerabfangen falls Über-/Unterlauf.
Diese ist zum Rechnen manchmal ganz gut.
Beispiel:
Dateserial(Year(mydate), Month(Mydate) + 1, 0) = immer der Letzte des Monats
Ich denke da gibt es immer wieder Anwendungen, auch z.B. bei alten Strukturen mit getrennten Datumfeldern.
Ggf. kann man ja noch einen "case when Year < 100 then case when Year < 40 then year + 2000 else year + 1900 end else year end" einbauen um 2-stellige Jahre zu berücksichtigen (wie Microsoft auch).
Similar Threads
-
By dschroeder in forum NEWSboard Programmierung
Antworten: 22
Letzter Beitrag: 22-08-14, 11:43
-
By oulbrich in forum NEWSboard Programmierung
Antworten: 0
Letzter Beitrag: 18-11-13, 08:52
-
By wdom in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 19-05-03, 13:58
-
By CZE425 in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 23-10-02, 11:56
-
By malzusrex in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 23-07-02, 10:07
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks