Datümer als char(8) vergleichen

Getting started ... Alles für einen gelungenen Start.
12 Beiträge • Seite 1 von 1
12 Beiträge Seite 1 von 1

Datümer als char(8) vergleichen

Beitrag von Micha_ela (ForumUser / 29 / 0 / 0 ) »
Hallo zusammen,

ich werde als Abap-neuling zum ersten mal mit datümern konfrontiert:
ich habe zwei Datumsangaben dat1 und dat2 als char8 in der Form yyyymmtt,
die ich miteinander vergleichen muß : wenn dat1<dat2.
wie konvertiere ich dat1 und dat2, dass ich die vergleichen kann ?

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Datümer als char(8) vergleichen

Beitrag von PeterPaletti (Specialist / 350 / 32 / 97 ) »
Gar nicht, du vergleichst die Daten einfach so wie sie sind.

Re: Datümer als char(8) vergleichen

Beitrag von msfox (Specialist / 374 / 57 / 76 ) »
PeterPaletti hat geschrieben:
27.04.2023 15:55
Gar nicht, du vergleichst die Daten einfach so wie sie sind.
Richtig. Es werden keine Datümer oder Datumse verglichen sondern Daten (=Mehrzahl von Datum). Also einfach mit > oder <.
--
Es gibt auch keine Stati oder Statuse. Mehrzahl von Status ist Status (nur anders betont).
<Neunmalklugsche..en ende>

Re: Datümer als char(8) vergleichen

Beitrag von PeterPaletti (Specialist / 350 / 32 / 97 ) »
msfox hat geschrieben:
27.04.2023 17:07
PeterPaletti hat geschrieben:
27.04.2023 15:55
Gar nicht, du vergleichst die Daten einfach so wie sie sind.
Richtig. Es werden keine Datümer oder Datumse verglichen sondern Daten (=Mehrzahl von Datum). Also einfach mit > oder <.
--
Es gibt auch keine Stati oder Statuse. Mehrzahl von Status ist Status (nur anders betont).
<Neunmalklugsche..en ende>
Und ich dachte immer, die Mehrzahl von Status ist "Statussis" 🤣

Re: Datümer als char(8) vergleichen

Beitrag von Micha_ela (ForumUser / 29 / 0 / 0 ) »
Hi zusammen,
Danke für eure Antworten
Hätte ich auch gedacht, funktionierte aber nicht, vielleicht muss ich meine komplette if-clause nochmal überprüfen ....😱

Re: Datümer als char(8) vergleichen

Beitrag von a-dead-trousers (Top Expert / 4413 / 224 / 1185 ) »
Wenn du die Datum (langes U) als Char vorliegen hast und nicht extra in den Typ D umwandeln willst (oder kannst) sollte dieser Ansatz alternativ auch funktionieren:

Code: Alles auswählen.

IF conv D( dat1 ) > conv D( dat2 ).
...
ENDIF.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Datümer als char(8) vergleichen

Beitrag von PeterPaletti (Specialist / 350 / 32 / 97 ) »
Man lernt hier immer was dazu:
Mit Daten(!) vom Typ C kann man nicht so bequem rechnen. Vielleicht steckt da ja der Teufel im Detail.

Code: Alles auswählen.

DATA: d1(8) TYPE c,
         d2(8) TYPE c.

d1 = sy-datum.
d2 = sy-datum + 2.

IF d1 < d2.
  WRITE: / 'D1 ist kleiner'.
ENDIF.
Das würde nicht funktionieren.

Code: Alles auswählen.

DATA: d1(8) TYPE c,
      d2(8) TYPE c,
      d3 type d.

d1 = sy-datum.
d3 = sy-datum + 2.
d2 = d3.

IF d1 < d2.
  WRITE: / 'D1 ist kleiner'.
ENDIF.
Das hingegen schon.

Off topic:
Datum stammt aus dem Lateinischen und gehört zur sogenannten O-Deklination, die Mehrzahl ist im Lateinischen Data und eingedeutscht Daten, wie z.B. bei Album/Alben.
Status stammt ebenfalls aus dem Lateinischen, gehört aber zur sogenannten U-Deklination, daher ist hier die Mehrzahl Status mit langen U.

Re: Datümer als char(8) vergleichen

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
PeterPaletti hat geschrieben:
28.04.2023 09:05
Man lernt hier immer was dazu:
Mit Daten(!) vom Typ C kann man nicht so bequem rechnen. Vielleicht steckt da ja der Teufel im Detail.
Eigentlich ist es ganz einfach, wenn man sich klarmacht, dass der Datentyp D ein CHAR-8 Format ist, für das aber eine Konvertierung nach I(nteger) definiert ist,wobei die konvertierte Zahl die Anzahl der Tage seit dem 1.1.0001 darstellt. Das 1. erlaubte Datum ist der 2.1.0001 weil die Null = 1.1.0001 als initial angesehen wird. Und es wird der hier übliche gregorianiche Kalender verwendet, wie man am Datumssprung im Oktober 1582 erkennt.

Code: Alles auswählen.

REPORT.
DATA: d TYPE d.
d = '15821004'.
WRITE:/ |{ d DATE = ISO }|.  " = 1582-10-04
d = d + 1.
WRITE:/ |{ d DATE = ISO }|.  " = 1582-10-15
Was die beiden Beispiele angeht:
Der "+" Operator ist nur für nummerische Typen definiert, so dass die Anweisung sy-datum + 2 zunächst dazu führt, dass sy-datum in eine Integerzahl umgewandelt wird, zu der dann 2 hinzuaddiert wird. Da D2 nun als Typ C(8) definiert wurde kommt nun eine Umwandlung von I nach C ins Spiel, so dass das 1. Beispiel nicht funktioniert weil hier D1 in etwa so aussieht "20230428" wohingegen D2 als nach Char gewandelte Integerzahl 738641 so aussieht " 738641" ( mit führendem Leerzeichen für ein theoretisch mögliches Vorzeichen ).
Bei dem 2. Beispiel mit der Hilfsvariablen D3 wird hingegen die errechnete Integerzahl wieder in das D-Format übersetzt, so dass hier wieder der interne Typ YYYYMMDD vorliegt, der dann 1:1 an die Char-Variable D2 übertragen wird.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag (Insgesamt 3):
PeterPalettiewxa-dead-trousers

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Datümer als char(8) vergleichen

Beitrag von DeathAndPain (Top Expert / 1961 / 261 / 415 ) »
msfox hat geschrieben:
27.04.2023 17:07
PeterPaletti hat geschrieben:
27.04.2023 15:55
Gar nicht, du vergleichst die Daten einfach so wie sie sind.
Richtig. Es werden keine Datümer oder Datumse verglichen sondern Daten (=Mehrzahl von Datum). Also einfach mit > oder <.
--
Es gibt auch keine Stati oder Statuse. Mehrzahl von Status ist Status (nur anders betont).
<Neunmalklugsche..en ende>
Die Frage ist, was man höher gewichtet: dass man lateinisch korrekt spricht oder dass der Angesprochene einen versteht. Das Wort "Daten" wird heute in aller Regel anders verwendet und auch anders verstanden. Genau deshalb hat sich das Alternativwort "Datümer" herausgebildet, das zwar kein korrekter lateinischer Plural ist, von allen aber als das verstanden wird, als was es gemeint ist: Plural eines Kalenderdatums. Und deshalb verwende ich es auch so. Ganz bewusst und in voller Kenntnis der hier geschilderten Zusammenhänge.

Davon abgesehen ist Sprache etwas Lebendiges, was sich laufend weiterentwickelt, so dass es schon von daher nicht angemessen ist, die kompromisslose Anwendung grammatikalischer Regeln zu postulieren, die schon 2000 Jahre alt sind. So kann man auch z.B. seit Jahrzehnten schon "Soße" sagen und schreiben, auch wenn das ursprüngliche Fremdwort dafür "Sauce" lautet.

Im übrigen sei auf Kaiser Sigismunds weise Worte verwiesen: "Ego sum rex Romanus et supra grammaticam."

Re: Datümer als char(8) vergleichen

Beitrag von PeterPaletti (Specialist / 350 / 32 / 97 ) »
Deine wohlfeile Argumantation geht an einer Stelle leider in die Grütze. Denn die Mehrzahl "Daten" stammt nicht aus dem Lateinischen - das wäre "data" - sondern aus dem Deutschen. Mit deinem Kunstwort "Datümer" setzt du dich nicht über das Lateinische hinweg, das hierzulande eh nicht gilt, sondern über die deutsche Sprache, die hierzulande sehr wohl Beachtung findet. Von daher sind an dieser Stelle Kaiser Sigismunds Worte Quatsch mit Soße.
Es ist auch nicht einzusehen, warum von dem ganzen Strauß an Homonymen, die die deutsche Sprache bereithält - wie z.B. "Flügel", "Tau", "Bank", "Ball", "umfahren" usw. - ausgerechnet das Wort "Daten" eine Sonderstellung einnehmen sollte. Bei den anderen Worten scheint die deutsche Sprache lebendig genug zu sein, dass sie die aushält und sich nicht niemand dran stört.

Summa summarum sei auf die weisen Worte einer Postkarte hingewiesen:
"Kannste so machen, ist es halt kacke".

Re: Datümer als char(8) vergleichen

Beitrag von msfox (Specialist / 374 / 57 / 76 ) »
DeathAndPain hat geschrieben:
28.04.2023 17:44
Die Frage ist, was man höher gewichtet:
Die Frage ist einfach, was im Duden steht, denn das ist für mich bindend.
https://www.duden.de/rechtschreibung/Daten
--
Wenn jeder seine eigene Regeln macht, nennt man das Slang.Und wenn ich etwas für Kunden programmiere, so verwende ich keinen Slang. Und wer ABAP entwickelt, entwickelt i.d.R. was für "Business" und dort wird auch keine Slang erwartet.

Re: Datümer als char(8) vergleichen

Beitrag von DeathAndPain (Top Expert / 1961 / 261 / 415 ) »
msfox hat geschrieben:
29.04.2023 22:33
DeathAndPain hat geschrieben:
28.04.2023 17:44
Die Frage ist, was man höher gewichtet:
Die Frage ist einfach, was im Duden steht, denn das ist für mich bindend.
Für mich nicht, denn was der Duden so zulässt, tut einem teilweise schon im Bauch weh. Davon abgesehen, wird ja nach Belieben an der deutschen Rechtschreibung herumgedoktert, teils auch von der Politik (wenn diese von wichtigen aktuellen Themen ablenken möchte). Mir liegen immer noch Teile der "Neuen Rechtschreibung" schwer im Magen, und ich werde auch weiterhin nicht bereit sein, absurde Schreibungen wie "infrage stellen" oder "zurzeit" zu übernehmen. Auch die Regel, dass man vor "und" kein Komma mehr schreibt, wenn es komplette Sätze voneinander trennt, finde ich willkürlich und nicht sachgerecht.

Aber wenn Du Fan des Dudens bist: gerade der Duden orientiert sich immer daran, was die Menschen sagen und schreiben. Wenn es genug Leute tun, wird es der Duden irgendwann als zulässig erklären - meines Wissens ist das sogar seine erklärte Philosophie. Ein klassisches Beispiel ist die Verwendung des Dativs anstelle des Genitivs ("das ist das Buch von dem Mann"). Klingt scheußlich, ist auch scheußlich, aber der Duden erlaubt es schon seit vielen Jahren.

Wie gesagt: die Sprache lebt und entwickelt sich, und der Duden läuft nur hinterher und erklärt für "richtig", was sich etabliert hat. Für mich persönlich sehe ich keinen Grund, darauf zu warten, bis die durch niemanden legitimierten Gremien des Dudens irgendwas entschieden haben. Das Wort "Datümer" hat sich etabliert, und in diesem Falle hat es einen ganz konkreten Nutzen, und zwar gerade für unsereins. Wie gesagt: Wenn man ein Projekt bespricht oder dokumentiert, dann ist es bedeutend zielführender (und damit professioneller), sich so auszudrücken, dass alle Beteiligten es richtig verstehen und es zu keinen Missverständnissen kommt, als so, wie es dem Duden entspricht.
PeterPaletti hat geschrieben:Mit deinem Kunstwort "Datümer" setzt du dich nicht über das Lateinische hinweg, das hierzulande eh nicht gilt, sondern über die deutsche Sprache, die hierzulande sehr wohl Beachtung findet.
Nur in der Hinsicht, dass (möglichst) so gesprochen wird, dass alle es verstehen. Und da fährt man mit dem Plural "Datümer" (bei Kalenderdatum) definitiv besser als mit dem Plural "Daten". Ich habe noch niemanden gesehen, der nicht verstanden hätte, wovon ich rede, wenn ich dieses Wort verwende (andersrum aber sehr wohl).

Seite 1 von 1

Vergleichbare Themen

1
Antw.
3170
Views
Konvertierug vom datentyp char der länge 4 in char der länge
von ratoshuan » 28.06.2006 11:33 • Verfasst in ABAP® Core
3
Antw.
2421
Views
char to int
von torsten hartmann » 18.07.2005 10:40 • Verfasst in ABAP® Core
11
Antw.
1215
Views
Speicherbedarf Char
von L0w-RiDer » 15.09.2019 10:33 • Verfasst in ABAP® für Anfänger
4
Antw.
2545
Views
CHAR 1000
von eschi78 » 02.07.2008 13:55 • Verfasst in ABAP® Core
20
Antw.
12874
Views
Konvertierung CHAR => RAW
von ralf.wenzel » 14.11.2012 13:00 • Verfasst in ABAP® Core

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.