Wie kann ich warf einen decimal-Feld ein Datum-Feld in DB2 AS/400?
Habe ich ein DECIMAL-Feld enthält ein Datum in der AS400-format: 1100614
Habe ich versucht:
cast (MYDATE as DATE)
aber ich kann nicht werfen einen DEZIMAL-zu-DATUM, in der Erwägung, dass
DATE(MYDATE)
null zurück.
Wie treibe ich das Feld in ein DATUM-Feld?
Ist, dass CYYMMDD? Wo 1 = 20? So, dass wäre 20100614?
Ja, es ist CYYMMDD.
Das problem ist, dass "CYYMMDD" nicht genau "AS/400-format". Es ist ein format von vielen Vergangenheit (und Gegenwart) Entwickler, weil Sie nicht wissen, wie man echte Datumswerte sind und da es entstand vor wahr-Datenbank DATUM-Definitionen wirklich noch gar nicht existierte. Trägheit hat gehalten, die form um ein paar Jahrzehnte seine Nützlichkeit. Ein modernes DATUM-Wert auf dem system nicht so aussieht, und hat nicht für eine lange Zeit. Es ist bedauerlich, dass es immer noch so viele Tabellen.
Ja, es ist CYYMMDD.
Das problem ist, dass "CYYMMDD" nicht genau "AS/400-format". Es ist ein format von vielen Vergangenheit (und Gegenwart) Entwickler, weil Sie nicht wissen, wie man echte Datumswerte sind und da es entstand vor wahr-Datenbank DATUM-Definitionen wirklich noch gar nicht existierte. Trägheit hat gehalten, die form um ein paar Jahrzehnte seine Nützlichkeit. Ein modernes DATUM-Wert auf dem system nicht so aussieht, und hat nicht für eine lange Zeit. Es ist bedauerlich, dass es immer noch so viele Tabellen.
InformationsquelleAutor kevin | 2010-06-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, es ist CYYMMDD wie ich fragte in meinem Kommentar oben, hier sind ein paar Optionen:
Es kann getan werden, aber es ist nicht einfach. Wenn Sie brauchen, um dies zu oft, kann es sich lohnen, Ihre Zeit schreiben Sie Ihre eigene Funktion, dies zu tun.
Ich schaute durch das IBM-Handbuch und ich sehe keine Unterstützung für CYYMMDD.
InformationsquelleAutor Mike Wills
Dies funktioniert, wenn man auf IBM i release 6.1 oder neuer, aber ich habe eine Vermutung, du bist auf eine alte version des Betriebssystems. Ich habe das hinzufügen von trick von dieses forum posten.
Ergebnisse:
Hier ist die Referenz zu den unterstützten Datums-string-Formate in DB2 for i, SQL.
InformationsquelleAutor twblamer
Eine einfachere (und mehr geeignet, wenn Sie möchten, dass Ihre eigene Funktion) Weg, dies zu tun wäre
Beispiel:
-Anzeige 2000 + Termine
Zeigt eine 1999 + Termine
InformationsquelleAutor Jeganinfo
Kürzlich bei einer DB2 für IBM i-Klasse, die ich besuchte, IBM-Leute waren, was auf eine pre-besiedelten Konvertierungs-Tabelle, in der die Datum-Werte in den verschiedenen Formaten, die Sie unterstützen müssen. Sie müssen nur 365 oder 366 Zeilen pro Jahr. Sie dann join auf diese Tabelle zu konvertieren. Natürlich Sie müssen, um die Indizes für jedes format eine gute Leistung. Ein Mann erklärte der Durchführung der beitreten könnte sogar schneller sein als der Aufruf einer umwandlungsfunktion.
Ein weiterer Vorteil ist, dass können Sie weitere Spalten in der Konvertierungs-Tabelle wie die Periode, die Viertel -, Geschäfts-Tag-Anzeige, usw., die erleichtern eine Reihe von Abfragen, beispielsweise um alle Bestellungen im Dritten Quartal.
Sagen wir zum Beispiel, die DATECONV Tabelle hat Spalten DATEFMT als echtes Datum und CYMDFMT als dezimal Datum, wählen Sie wäre
WÄHLEN SIE DATEFMT, ...
FROM MYTABLE JOIN DATECONV auf CYMDFMT=MYDATE
Ein Problem mit dieser Lösung ist, dass, wenn Sie mit ungültigen Daten, die als spezielle Werte wie 9999999, da Sie nicht mit ungültigen Daten in der realen Feld Datum. Aber dann kann man nicht konvertieren Sie Sie trotzdem.
InformationsquelleAutor user293106
[Und eher einfach] - Ausdruck überprüft, die Funktion so weit zurück, wie v5r3, und für die die MYDATE-Spalte kann definiert werden CHAR(7), JAN(7), NUMERISCH(7), INTEGER-oder FLOAT-Datentypen [oder eine größere Länge/Präzision Variante dieser Typen] folgt; das DATUM casting Skalare in diesem Beispiel gezeigt, ist die Umwandlung die Folge einer character-string-expression [pro CONCAT] das ergibt ein 14-Zeichen-string, der gilt als ein ZEITSTEMPEL mit dem format
'YYYYMMDDHHMMSS'
:Hinweis: Die obigen Ausdruck kann [an anderer Stelle gesehen] geschrieben, mit einer ZIFFERN-casting-Skalarwert für das DEZIMAL-casting-Ergebnis, aber das wäre überflüssig, angesichts der Zusatz von einem Wert mit einem 8-Ziffern für die Genauigkeit, und impliziten cast von numeric character für den DEC (expression); die ZIFFERN sind erforderlich, wenn der Umgang mit Datumsangaben, die vor das Jahr 1000 zu gewährleisten, wird eine führende null in den string Ergebnis, oder auf einige, auch ältere Versionen, wo es keine Möglichkeit der impliziten cast von numeric character.
IBM i 7.2->Datenbank->Referenz->SQL-Referenz - ->Language-Elemente->Daten-Typen->Datetime-Werte->String-Darstellungen von datetime-Werte->Timestamp strings
InformationsquelleAutor CRPence