Announcement

Collapse
No announcement yet.

CAST numeric into string

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • CAST numeric into string

    Hallo,

    Ich möchte eine Jahreszahl, das als Datentyp DOUBLE vorliegt, in CHAR konvertieren.

    Beispiel:
    Code:
    SELECT CAST(1980 AS CHAR(4))
    Ich kriege die folgenden Meldung:

    Code:
    Total execution time: 0.006s
    Preparing query: 
    SELECT CAST(1942 AS CHAR(4))
    Error: *** IBPP::SQLException ***
    Context: Statement::Prepare( 
    SELECT CAST(1942 AS CHAR(4)) )
    Message: isc_dsql_prepare failed
    
    SQL Message : -104
    can't format message 13:896 -- message file C:\Windows\firebird.msg not found
    
    Engine Code    : 335544569
    Engine Message :
    Dynamic SQL Error
    SQL error code = -104
    Unexpected end of command - line 2, column 28
    
    
    Total execution time: 0.005s
    Worin liegt das Problem? Ich habe das Internet durchsucht aber für mich nichts verständliches gefunden. Bin dankbar für jede Hilfe.
    giordano

  • #2
    Hallo,

    kommst du mit SQL Server Hintergrund? Dein Statement ist nämlich kein gültiges SQL in Firebird. Folgendes sollte klappen:
    [highlight=sql]
    select cast(1980 as char(4)) from rdb$database
    [/highlight]
    Thomas
    Thomas Steinmaurer

    Firebird Foundation Committee Member
    Upscene Productions - Database Tools for Developers
    Mein Blog

    Comment


    • #3
      Danke für die schnelle Antwort. Mein Hintergrund ist MySQL.
      Dein SQL klappt. Offenbar braucht man ein DUMMY database.

      Wie kommt man eigentlich auf die Syntax mit rdb$database? Ich habe keine Doc dazu gefunden.

      Ich habe festgestellt, dass
      Code:
      SELECT CAST(1980.00  AS char(4)) FROM rdb$database
      nicht funktioniert (conversion error from string).

      Das heisst, man muss es zuerst in INTEGER umwandeln:
      Code:
      SELECT cast(CAST(1980.00 AS INTEGER)  AS char(4)) FROM rdb$database
      Besten Dank für die Hilfe.
      giordano

      Comment


      • #4
        Wie kommt man eigentlich auf die Syntax mit rdb$database?
        RDB$DATABASE ist in Firebird eine Systemtabelle mit einem Datensatz. Ähnlich zu DUAL in Oracle, halt mit anderem Inhalt.

        Natürlich funktioniert:
        [highlight=sql]
        SELECT CAST(1980.00 AS char(4)) FROM rdb$database
        [/highlight]
        nicht, da "1980.00" aus Sicht eines Strings 7 Zeichen lang ist. Also entweder vorher auf etwas casten mit 4 Stellen (in deinem Beispiel implizit Integer durch abschneiden der Nachkommastellen) oder halt CHAR(7) statt CHAR(4) verwenden.
        Thomas Steinmaurer

        Firebird Foundation Committee Member
        Upscene Productions - Database Tools for Developers
        Mein Blog

        Comment


        • #5
          Hallo Thomas,
          Besten Dank für die Ausführungen.
          giordano

          Comment

          Working...
          X