CASE when . . . / CONCAT
- Dieses Thema hat 2 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 18 Jahre, 3 Monaten vonMitglied.
- AuthorPosts
- 12. Februar 2005 um 6:14 Uhr #2511
Ich habe 2 Columns, jeweils numerisch, 1-stellig, NULL-Werte möglich. Diese werden concatiniert. Die Inhalte sind : 11 oder 10. Wenn jeweils eine 1, dann soll ein ‚A‘ ausgegeben werden, bei 10 ein ‚B‘.
Er läuft allerdings fälschlicherweise immer auf den ELSE-Zweig ! Was ist da bitte falsch ?>>>>>>>>>
Select
CASE ‚x‘ II char(coalesc(column1,2)) II char(coalesc(column2,2))
when ‚x11‘ then ‚A‘
when ‚x10‘ then ‚B‘
else ‚C‘
END14. Februar 2005 um 8:06 Uhr #2970Hallo,
das Casten mit der CHAR()-Funktion führt zu einer Zeichenkette von mindestens 6 Bytes Länge, die rechts mit Blanks aufgefüllt wurde. Daher erhälst Du als Ergebnis nicht "x11" sondern "x1 1 ". Siehe hierzu auch die Beschreibung der Funktion CHAR() in der DB2-Doku.
Du müsstest die Blanks aus den CHAR-Ausdrücken z.B. noch mit RTRIM() entfernen oder gleich Zeichenketten mit Länge eins erzeugen ("CAST …. AS CHAR(1))").Gruss,
Alex14. Februar 2005 um 12:08 Uhr #3293oder gleich codieren:
SELECT
CASE
WHEN ( column1 = 1 AND column2 = 1 ) THEN ‚A‘
WHEN ( column1 = 1 AND column2 = 0 ) THEN ‚B‘
ELSE ‚C‘
ENDalternativ:
SELECT
CASE ( 10 * column1 + column2 )
WHEN 11 THEN ‚A‘
WHEN 10 THEN ‚B‘
ELSE ‚C‘
END - AuthorPosts
You must be logged in to reply to this topic.