2011-04-25 5 views
0

RechercheErreur de conversion varchar numérique avec MSSQL

SELECT TOP 1000 
CASE WHEN VRI.Square_Footage <> '' 
THEN VRI.Square_Footage 
ELSE 
    CASE WHEN VRI.Property_Type = 'LAND' 
     THEN CAST((CONVERT(NUMERIC(38, 3),VRI.Acres)*43560) AS DECIMAL) 
    ELSE 
     VRI.Lot_Size 
    END 
END 
FROM View_Report_Information_Tables AS VRI 

Même si j'ai vérifié pour VRI.Acres avec isnumeric(), il donner toujours la même erreur exacte? Comment puis-je résoudre ce problème?

+0

@Conrad Frix: Merci pour le montage! Btw, vous avez un avatar très cool;)! – Chan

Répondre

2

ISNUMERIC ne garantit pas qu'il sera casté avec succès à decimal.

SELECT ISNUMERIC('£100') /*Returns 1*/ 

SELECT CONVERT(NUMERIC(38, 3),'£100') /*Error*/ 

De plus, toutes les branches de la déclaration case doivent revenir compatibles types de données. Il semble que VRI.Square_Footage est une chaîne.

Est-ce que cela fonctionne pour vous?

SELECT TOP 1000 CASE 
        WHEN ISNUMERIC(VRI.Square_Footage + 'e0') = 1 THEN 
        VRI.Square_Footage 
        WHEN VRI.Property_Type = 'LAND' 
         AND ISNUMERIC(VRI.Acres + 'e0') = 1 THEN CAST((
        CONVERT(NUMERIC(38, 3), VRI.Acres) * 43560) AS DECIMAL) 
        WHEN ISNUMERIC(VRI.Lot_Size + 'e0') = 1 THEN VRI.Lot_Size 
       END 
FROM View_Report_Information_Tables AS VRI 
+0

@Martin: Merci. Oui, 'VRI.Square_Footage' est en fait' varchar'. Comment puis-je contourner ce problème? – Chan

+1

Ceci. Vous ne pouvez pas mélanger des chaînes et des nombres dans la même colonne. L'un d'entre eux doit être converti à l'autre. –

+0

@Jerry Ritcey: Cela signifie que je dois convertir tout 'varchar' en décimal? – Chan

2

courir ici cette

SELECT ISNUMERIC('d25') 

qui peut être converti en float mais pas décimal/numérique

SELECT CONVERT(FLOAT,'2d5') 

Comme vous pouvez le voir, vous ne pouvez pas dépendre numérique pour décimal/types de données numériques

Jetez un oeil à IsNumeric, IsInt, IsNumber pour un code qui vous montrera comment vous pouvez vérifier

Questions connexes