Anmelden

View Full Version : jjmt + 1 Tag als jjmt im SQL



Seiten : [1] 2

Robi
19-06-14, 11:06
Hi *all
ich brech mir grade die Finger um ein Feld das JJJJMMTT enhällt mit SQL um einen tag zu erhöhen und wieder als JJJJMMTT zur verfügung zu stellen.
z.tz habe ich dieses (funktionierende) Monster

SELECT 20000000 + cast(
substring(char(
date(
substring(digits(medbis), 1, 4) concat '-' concat
substring(digits(medbis), 5, 2) concat '-' concat
substring(digits(medbis), 7, 2)
)-1 days), 7, 2) concat
substring(char(
date(
substring(digits(medbis), 1, 4) concat '-' concat
substring(digits(medbis), 5, 2) concat '-' concat
substring(digits(medbis), 7, 2)
)-1 days), 4, 2) concat
substring(char(
date(
substring(digits(medbis), 1, 4) concat '-' concat
substring(digits(medbis), 5, 2) concat '-' concat
substring(digits(medbis), 7, 2)
)-1 days), 1, 2) as decimal(8))
FROM Datei WHERE MEDLS = 'WERT'


gehts auch einfacher?
V7R1
Robi

TheDevil
19-06-14, 11:24
Hi,

UPDATE lib/file
SET field =
DEC(VARCHAR_FORMAT(TIMESTAMP(DIGITS(field) CONCAT '000000') + 1
DAY, 'YYYYMMDD'), 8, 0);

Wobei mein Feld direkt 8,0 decimal war. Evtl. musst dudas in dem digits() noch anpassen.
Ansonsten funzt das wunderbar.

Das habe ich mal von Brigitta bekommen :)

Gruß,
Ralf

Fuerchau
19-06-14, 11:24
Müsste so funktionieren:
dec(replace(char(date(char(jjjjmmttfeld * 1000000) + 1 days, iso), '-', ''), 8, 0)

Wozu die 20000000?
Enthält dein Datum kein vollständiges Jahr?

Robi
19-06-14, 11:27
Klasse, Danke!
funktioniert
Wenn wir unsre Birgitta nicht hätten ...

Danke!

Robi
19-06-14, 11:29
@Baldur

Wozu die 20000000?
Enthält dein Datum kein vollständiges Jahr?

doch.
aber Date gibt mir tt.mm.jj zurück (Datumsformat *DMY) beim Kunden

Robi

TheDevil
19-06-14, 11:39
By the way ... ich bin immer wieder von der schnelligkeit und der Qualität der Antworten hier in der Community erstaunt / begeistert ....

Fuerchau
19-06-14, 11:53
Date() gibt immer den Typ Date zurück.
Einzig bei der Funktion CHAR(DATE()) wird das Jobformat berücksichtigt und kann ggf. zum Fehhler führen (< 1.1.40 oder > 31.12.39).
Dies kann man aber mit CHAR(DATE(), ISO) umgehen.

Robi
19-06-14, 12:00
Thx,
wieder was gelernt
(stimmt natürlich, ich verwende Char(date(...)
Robi

B.Hauser
19-06-14, 13:30
Unter 7.1 sollte es auch so funktionieren:


Select ...
Int(VarChar_Format(Timestamp_Format(Digits(Datum), 'YYYYMMDD') + 1 Day, 'YYYYMMDD'))
From ...

Ab 7.2:
Kann man's dann etwas vereinfachen:

Select ...
Int(Date(Timestamp_Format(Digits(NumDatum), 'YYYYMMDD') + 1 Day))
From ...

Birgitta

Fuerchau
19-06-14, 13:41
Schön, wer V7ff hat, wenn man noch auf V5R2 bis V6R1 arbeitet:).