Ankündigung

Einklappen
Keine Ankündigung bisher.

Date in String konvertieren

Einklappen
X

Date in String konvertieren

Einklappen
  • Filter
  • Zeit
Alles löschen
neue Beiträge

  • Date in String konvertieren

    Hallo zusammen,

    ich habe in einem Prozess folgenden Select in einem Groovy-Script:

    stmt = g_dbQuery.prepare(conn, """
    SELECT DISTINCT NR_MA, DAT_STICHTAG_DVE
    FROM DATAGROUP('6B64DCDDC38F1174683A8D58E28A681A522800F A')
    WHERE SL_BNU=? AND DAT_STICHTAG_DVE IN (
    SELECT TOP 1 DAT_STICHTAG_DVE
    FROM DATAGROUP('6B64DCDDC38F1174683A8D58E28A681A522800F A')
    WHERE SL_BNU=?
    ORDER BY DAT_STICHTAG_DVE DESC
    )
    ORDER BY NR_MA""")

    Nun hat sich in der Quelle das Format von DAT_STICHTAG_DVE geändert (aus String wurde Datetime).

    Kann man das Format zuvor konvertieren und dann über eine Variable im Select aufrufen, oder wie ist hier vorzugehen?

    (Meine Groovy-Kenntnisse gehen leider gegen Null)

    Danke für Eure Hilfe
    Heiko

  • #2
    Hallo Heiko,
    ich verstehe dein Problem noch nicht wirklich. Wie löst denn das geänderte Format an welcher Stelle ein Problem aus?
    Gruss
    Kerstin

    Kommentar


    • #3
      Sorry. Aber ich verstehe es auch nicht... Auch bisschen schwierig, wenn (wahrscheinlich) 90% Quellcode fehlt

      Kommentar


      • #4
        Ich schließe mich an, mit den vorhandenen Informationen wird es hier schwer für uns...

        Ein Tipp allerdings: Während dir der Umgang mit Groovy (noch) schwerfällt klappt es mit SQL eventuell besser? Als schnelle Lösung könntest du dein Select (Zeile 1) so anpassen, dass es statt dem datetime weiterhin ein varchar ausgibt. Dazu kannst du unter SQL Server z.B. die Funktionen convert() oder cast() verwenden, unter PostgreSQL to_char().

        Kommentar


        • #5
          Grundsätzlich kann ein Datum im Groovy in jedes gewünschte Format gebracht werden.
          Folgendes Beispiel nimmt das Datum aus einer Abfrage und formatiert es um:

          def ts=rs.getTimestampValue(1)
          SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy")
          String result=sdf.format(ts)
          println(result)

          Ich hoffe, das hilft

          Kommentar


          • #6
            Hier der komplette Quellcode:

            import de.uplanet.scripting.groovy.util.Safely

            def conn = g_dbConnections["Controlling_APPSRV13_SQL01_MSDWH_LESEND"]
            def stmt = null
            def rs = null

            def userName = g_record["1F43AAB012031828412737C435A01E87EDF39079"].value /* datafield Benutzername <string> */

            try
            {
            //Beraternummer (NR_MA) des aktuellen Benutzers aus dem letzten Monat/Stichtag (DAT_STICHTAG_DVE)
            stmt = g_dbQuery.prepare(conn, """
            SELECT DISTINCT NR_MA, DAT_STICHTAG_DVE
            FROM DATAGROUP('6B64DCDDC38F1174683A8D58E28A681A522800F A')
            WHERE SL_BNU=? AND DAT_STICHTAG_DVE IN (
            SELECT TOP 1 DAT_STICHTAG_DVE
            FROM DATAGROUP('6B64DCDDC38F1174683A8D58E28A681A522800F A')
            WHERE SL_BNU=?
            ORDER BY DAT_STICHTAG_DVE DESC
            )
            ORDER BY NR_MA""")
            stmt.setString(1, userName)
            stmt.setString(2, userName)

            rs = stmt.executeQuery()
            def maList = []
            println "$userName"
            while (rs.next())
            {
            maList.add("${rs.getIntValue(1)}")
            println "${rs.getIntValue(1)} ${rs.getTimestampValue(2)}"
            }
            g_sharedState.maNr = maList.join(",")
            }
            finally
            {
            rs = Safely.close(rs)
            stmt = Safely.close(stmt)
            }

            Die konkrete Fehlermeldung lautet:
            ERROR 2021-01-11T10:14:22,518Z - de.uplanet.lucy.server.workflow.WorkflowEngine[WorkflowTimerWorker-1610165956410]
            wfGuid=DE3AD7E775CF3817B5599A5F695DC362680B5D35 wfTitle="Benutzer - Beraternummern importieren" wfRun=DE3AD7E775CF3817B5599A5F695DC362680B5D35-1610165956411 wfObjGuid=C8D66AD1B27FAF1242B93AF290B8B33D88FF67D6 wfObjClass=de.uplanet.lucy.server.workflow.action. GroovyScriptWorkflowAction wfObjTitle="Beraternummer ermitteln" Error while processing workflow.
            org.codehaus.groovy.runtime.InvokerInvocationExcep tion: de.uplanet.lucy.server.util.db.ValueCastException: Cannot cast java.lang.String to a timestamp.

            Meine Interpretation der Fehlermeldung war nun, dass der "DAT_STICHTAG_DVE" nicht mehr abgefragt werden kann, da er von "String" auf "Datetime" gewechselt hat.
            Bin ich hier überhaupt auf der richtigen Spur?

            Kommentar


            • #7
              Ich interpretiere die Meldung eher so, dass DAT_STICHTAG_DVE eigentlich kein Timestamp ist sondern ein String. Es wird aber mit getTimestampValue versucht als Timestamp auszulesen.

              Kommentar


              • #8
                Vielleicht ist es genau andersherum? Ersetze mal getTimestampValue(2) mit getStringValue(2).

                Edit: MartinW war schneller

                Kommentar


                • #9
                  Es ist tatsächlich andersherum. Da hab ich mich aber ordentlich vertan .
                  Danke an alle.

                  Kommentar

                  Lädt...
                  X