2017-05-02 3 views
0

Ich erhalte diesen Fehler, wenn ich die case-Anweisung unten ausführe. Ich denke ich muss irgendwann umstellen, aber nicht sicher wo oder wie.Konvertierung fehlgeschlagen beim Konvertieren des Varchar-Werts im Fall

Konvertierung fehlgeschlagen, wenn der Varchar-Wert 'neu zugeordnet' in Daten konvertiert wird Typ int.

,(CASE WHEN Mstime <=10 THEN CAST('reassign' as varchar(30)) 
      WHEN Mstime >=10 THEN Mstime END) as TimeGroup 

Antwort

2

Guss die else, nicht die then (es ist bereits ein String):

(CASE WHEN Mstime <= 10 THEN 'reassign' 
     WHEN Mstime >= 10 THEN CAST(Mstime as varchar(30)) 
END) as TimeGroup 

Das Problem Sie konfrontiert sind, ist, dass die ELSE eine INT zurückgibt. Nach den Regeln der Typenkompatibilität versucht SQL Server, den CASE Ausdruck eine INT anstelle einer Zeichenfolge zurückzugeben.

2

Sie müssen cast()Mstime-varchar(30) wenn das der Datentyp Sie für diesen Ausdruck zurückgeben möchten.

,(case when Mstime <=10 then cast('reassign' as varchar(30)) 
     when Mstime >=10 then cast(Mstime as varchar(30)) 
     end) as TimeGroup 
Verwandte Themen