2017-10-02 3 views
-2

ich einige Codes aus einem aktuellen Benutzer gegeben, die ich nicht herausfinden kann, wie Microsoft SQL Server 2014.Mit COALESCE und Konvertieren von Datetime-Felder

,TO_CHAR(COALESCE(TASK.ACT_START_DATE, TASK.TARGET_START_DATE, 
TASK.EARLY_START_DATE), 'MM/DD/YYYY HH24:MI') 
    || 
COALESCE(NVL2(TASK.ACT_START_DATE, ' A', NULL), 
NVL2`enter code here`(TASK.TARGET_START_DATE, ' P', NULL), 
NVL2(TASK.EARLY_START_DATE, ' E', NULL)) AS START_DATE_FMT 

Die Datumsfelder, um umgewandelt werden konvertieren um entweder ein "A", "P" oder ein "E" hinter dem Datum hinzuzufügen.

Gibt es eine Möglichkeit, einen ähnlichen Code in SQL Server zu verwenden, um die Informationen zu erhalten? Ich habe überlegt, eine CASE-Anweisung zu verwenden, um auf Null zu überprüfen, aber ich kann die Syntax nicht korrekt finden.

+1

Ein CASE Ausdruck ist der Weg zu gehen. Veröffentlichen Sie Ihren Versuch, CASE zu verwenden, und wir können Ihre Syntax debuggen. –

+0

CASE, wenn TASK.ACT_START_DATE NULL ist, dann '' ELSE 'A' + CONVERT (VARCHAR (19), TASK.ACT_START_DATE, 20) \t WENN TASK.TARGET_START_DATE NULL DANN '' ELSE 'P' + CONVERT (VARCHAR (19) TASK_TARGET_START_DATE, 20) \t WENN TASK.EARLY_START_DATE IS NULL THEN '' ELSE 'E' + CONVERT (VARCHAR (19) TASK.EARLY_START_DATE, 20) \t END AS START_DATE_FMT –

+0

A 'CASE' Ausdruck nur eine' ELSE haben kann 'Klausel. –

Antwort

0

Try this ...

FORMAT(COALESCE(TASK.ACT_START_DATE, TASK.TARGET_START_DATE,TASK.EARLY_START_DATE), 'MM/dd/yyyy HH:mm') + 
CASE WHEN TASK.ACT_START_DATE IS NOT NULL THEN ' A' 
    WHEN TASK.TARGET_START_DATE IS NOT NULL THEN ' P' 
    WHEN TASK.EARLY_START_DATE IS NOT NULL THEN ' E' 
ELSE '' END AS START_DATE_FMT 
+0

Mit dem obigen Code erhalte ich einen inkorrekten Syntaxfehler in der Nähe des Schlüsselwortes COALESCE. –

+0

Macht nichts. Benutzerfehler –

0

Hier ist eine weitere Option. Denken Sie nicht, dass Sie hier einen Fallausdruck benötigen.

select 
FORMAT(COALESCE(TASK.ACT_START_DATE, TASK.TARGET_START_DATE,TASK.EARLY_START_DATE), 'MM/dd/yyyy HH:mm') 
+ coalesce(' A' + CONVERT(VARCHAR(19),TASK.ACT_START_DATE,20) 
    , ' P' + CONVERT(VARCHAR(19), TASK_TARGET_START_DATE,20) 
    , ' E' + CONVERT(VARCHAR(19), TASK.EARLY_START_DATE,20))