Kurze Syntaxfrage: Case

MysterioJN

SQL-Guru
Beiträge
158
Moin zusammen,

Vorab: Ich benutze ein HTML-fähiges SQL Modul zur Abfrage und Darstellung im DotNetNuke, daher kann ich mit HTML-Inhalten in den Tabellen arbeiten.

Es geht um Tageberechnung zwischen "heute" und dem "Enddatum"

Code:
SELECT ...

CASE
WHEN Datediff(dd,Convert(date,getdate()),Projektende) < '0'
THEN  '<font color = "red"> Datediff(dd,Convert(date,getdate()),Projektende) </font>'
ELSE Datediff(dd,Convert(date,getdate()),Projektende)
END AS Resttage

FROM...

Wenn das Ergebnis: Projektende - getdate() < 0 dann soll er mir die Differenz in (html) rot ausgeben. Wenn nicht dann ohne Farbformatierung.

Wenn das Ergebnis: Projektende - getdate() > 0 ist, funktioniert es, wenn es < 0 ist kommt folgende Fehlermeldung:

Fehler beim Konvertieren des varchar-Werts '<font color = "red"> Datediff(dd,Convert(date,getdate()),Projektende) </font>' in den int-Datentyp.

Habt ihr eine Idee?
 
Werbung:
Code:
THEN '<font color = "red"> Datediff(dd,Convert(date,getdate()),Projektende) </font>'

da fehlen ' , es könnte so richtig sein:

Code:
THEN '<font color = "red">' || Datediff(dd,Convert(date,getdate()),Projektende)::text || '</font>'

so in der Art, ich hab kein M$SQL.
 
Hatte ich auch erst versucht, aber da kommt Syntaxfehler.

Wenn ich jetzt es beispielsweise mal mit Text versuche, klappt es:
Code:
CASE
WHEN ImVerkauf = 1
THEN '<font color = "blue"> <b> Ja </font></b>'
ELSE '<font color = "red"><b> Nein </font></b>'
END


Ergebnis in SQL-Tabelle:
<font color = "red"><b> Nein </font></b>


Hmm... steh auf dem Schlauch.
 
Befürchte, das man durch die HTML-Formatierung das Ergebnis automatisch als String auswirft und er DARIN keine Bezüge/Berechnungen machen kann. Arg...
 
OK anderes Thema:

Weißt du, wie ich ASCII bzw. UNICODE Zeichen in einen Select einbauen kann?


EDIT: Ok selbst beantwortet:
Einleitung mit '&#NUMMER'
Beispie: '&#9989'
 
Zuletzt bearbeitet:
Werbung:
datediff(dd,[...]) liefert dir immer einen Integer. Wenn du jetzt in der ersten Zeile einen Integer zurück bekommst (z.B. weil ELSE eintritt) und die nächste Spalte einen Char liefert weil dein HTML-Tag da rein gebastelt wird dann kann MSSQL die Spalte wegen unterschiedlicher Datentypen nicht zusammen setzen.

Konvertiere einfach dein Ergebnis aus datediff() immer erst in einen Char bevor du es mit anderen Textelementen kombinierst.
Code:
SELECT ...

CASE
WHEN Datediff(dd,Convert(date,getdate()),Projektende) < 0
THEN '<font color = "red">' + cast(Datediff(dd,Convert(date,getdate()),Projektende) AS VARCHAR(10)) + '</font>'
ELSE cast(Datediff(dd,Convert(date,getdate()),Projektende) AS VARCHAR(10))
END AS Resttage

FROM...
 
Zurück
Oben