将Varchar转换为Float仍会给出错误

时间:2018-08-08 10:34:28

标签: sql sql-server casting

有人可以帮助我吗?为什么我仍然会出现错误?将varchar转换为float时出错

我必须将p.menge(浮动)和p.wert(varchar)添加到一个浮动行。

p.wert拥有不同的值->

enter image description here

SELECT a.AdressNrADR,k.monat,k.Jahr,p.Id_kopf,a.name + ' '+ a.vorname as Name,p.Artikel, p.tag,CAST(CASE WHEN p.wert = '' THEN p.Menge  
            WHEN p.wert IS NULL THEN p.Menge  ELSE (ISNULL(CASE WHEN p.wert = 'A' THEN '1' WHEN p.wert = 'B' THEN '0' WHEN p.wert = 'C' THEN '0' WHEN p.wert = 'D' THEN '0' ELSE p.wert END,0)) END AS FLOAT) AS Menge

            FROM   ( ( ( ZUS_Monatsreport_Kopf k
            LEFT JOIN  ZUS_Monatsreport_Pos p ON k.Id =  p.Id_Kopf)  
            LEFT JOIN  ADR_Adressen a ON k.Adresse =  a.AdressNrADR)  
            LEFT JOIN  ADR_GruppenLink gl ON a.AdressNrADR =  gl.AdressNrADR)  
            LEFT JOIN  ADR_Gruppen g ON gl.GruppeADR =  g.GruppeADR

1 个答案:

答案 0 :(得分:0)

SELECT a.AdressNrADR,k.monat,k.Jahr,p.Id_kopf,
   a.name + ' '+ a.vorname as Name,p.Artikel, p.tag,
   cast(CASE WHEN p.wert IS NULL or p.wert = '' THEN p.Menge
   ELSE ISNULL(CASE 
        WHEN p.wert = 'A' THEN 1 
        WHEN p.wert = 'B' THEN 0 
        WHEN p.wert = 'C' THEN 0 
        WHEN p.wert = 'D' THEN 0 
        ELSE TRY_CONVERT(float, p.wert) END,0) as float) AS Menger
   FROM   ( ( ( ZUS_Monatsreport_Kopf k
            LEFT JOIN  ZUS_Monatsreport_Pos p ON k.Id =  p.Id_Kopf)  
            LEFT JOIN  ADR_Adressen a ON k.Adresse =  a.AdressNrADR)  
            LEFT JOIN  ADR_GruppenLink gl ON a.AdressNrADR =  gl.AdressNrADR)  
            LEFT JOIN  ADR_Gruppen g ON gl.GruppeADR =  g.GruppeADR