2013-11-02 7 views
7

Ich sehe seltsames Ergebnis, wenn diese Abfrage ausführenWeiße Räume, wenn varchar Feld Aktualisierung mit iif in Firebird

update sd_invodt set line_type=iif(is_promo=1, 'campaign', 'item') 

Der Wert in line_type Feld "item " sein wird. Es gibt Leerzeichen im Wert. Aber , wenn ich diese Abfrage ausführen

update sd_invodt set line_type='item' 

ich nicht weiß Plätze.

Jetzt muss ich trim als Abhilfe verwenden

update sd_invodt set line_type=trim(iif(is_promo=1, 'campaign', 'item')) 

I neueste 2.5 Firebird verwenden. Linientyp ist ein varchar (15).

Ist dieser Fehler in Firebird?

EDIT

ich unter Verwendung der neuen Datenbank getestet, und das Problem weiterhin besteht.

Antwort

4

Der Ergebnistyp des iif() hängt von der Eingabe ab, und im Fall einer Zeichenfolge scheint der Ergebnistyp char(x) zu sein, wobei x die Länge der längsten Eingabezeichenfolge ist. So wird die "item" mit 4 Leerzeichen aufgefüllt, um es so lange wie die "Kampagne" zu machen. Ich denke, das ist Absicht, aber Sie möchten vielleicht ein Ticket für die FB issuetracker eingeben.

So ist die iif() Rückkehr "item " bei ersten Parameter ist falsch und wenn Sie Räume auf varchar Feld speichern sie aufbewahrt werden.

+3

Es wird nicht als Fehler betrachtet, siehe [CORE-4147] (http://tracker.firebirdsql.org/browse/CORE-4147) –