Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Kurze Syntaxfrage: Case

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von MysterioJN, 9 März 2017.

  1. MysterioJN

    MysterioJN Datenbank-Guru

    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?
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  3. MysterioJN

    MysterioJN Datenbank-Guru

    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.
     
  4. MysterioJN

    MysterioJN Datenbank-Guru

    Befürchte, das man durch die HTML-Formatierung das Ergebnis automatisch als String auswirft und er DARIN keine Bezüge/Berechnungen machen kann. Arg...
     
  5. MysterioJN

    MysterioJN Datenbank-Guru

    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: 9 März 2017
  6. ukulele

    ukulele Datenbank-Guru

    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...
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden