2017-06-30 4 views
0

Ich habe die folgende Zeile in einem TVF:SQL DateTime- oder String

CASE WHEN MIN(ISNULL(EersteStart,GETDATE())) = GETDATE() 
then 'InOverleg' 
else MIN(ISNULL(EersteStart,GETDATE())) end as EersteStartDatum 

Mit Ausnahme der Tatsache, dass diese Art von scheint ineffizientes es immer noch nicht funktioniert, da es die folgende Fehlermeldung erzeugt:

Conversion failed when converting date and/or time from character string. 

Ich verstehe den Fehler, aber wie kann ich die Abfrage anpassen, um die Funktionalität bereitzustellen, die ich möchte? (Gibt die Zeichenfolge 'InOverleg' zurück, wenn die zugrunde liegende Abfrage für alle EersteStartDatum-Felder jeder Zeile null zurückgibt oder das MIN-Datum anzeigt, wenn Zeilen vorhanden sind, in denen EersteStartDatum nicht NULL ist).

+1

Die einzige Möglichkeit ist, das Datum als String – Jens

+1

zurückzugeben Welche [DBMS] (https://en.wikipedia.org/wiki/DBMS) verwenden Sie? –

+0

@a_horse_with_no_nam Ich benutze SQL Server – Kai

Antwort

2

Was ist verwirrend? case ist ein Ausdruck und muss einen Typ zurückgeben. SQL Server neigt dazu, in den restriktiveren Typ zu konvertieren. In dieser case ist die restriktivere Zeit ein datetime. 'InOverLeg' wird nicht konvertiert.

Sie können das Datum in eine Zeichenfolge konvertieren:

(CASE WHEN MIN(COALESCE(EersteStart, GETDATE())) = GETDATE() 
     THEN 'InOverleg' 
     ELSE CONVERT(VARCHAR(10), MIN(COALESCE(EersteStart, GETDATE())), 121) -- or whatever format you like 
END) as EersteStartDatum 
0

Verwenden CAST(data_to_return AS varchar(my_desired_string_length)) für alle Rückgabedaten (dann führen und anderes Ergebnis). Jetzt werden Sie auf jeden Fall eine Zeichenfolge zurückgeben.