2009-07-15 6 views
1

Je suis en train de cogner dans certains champs null dans une base de données SQL2005.Champs de texte de conversion SQL

Certains rapport Null et d'autres ont des valeurs comme 1.00 ou 713.00.
Je voudrais un moyen pare-balles pour convertir les valeurs 'Null's to 0 et' 1.00 'et' 713.00 'en Money types.

Répondre

1
CREATE TABLE dbo.Test_Text_Convert 
(
    my_string  TEXT  NULL 
) 
GO 
INSERT INTO dbo.Test_Text_Convert VALUES (NULL) 
INSERT INTO dbo.Test_Text_Convert VALUES ('7.10') 
INSERT INTO dbo.Test_Text_Convert VALUES ('xxx') 
INSERT INTO dbo.Test_Text_Convert VALUES ('$20.20') 
INSERT INTO dbo.Test_Text_Convert VALUES ('20.2020') 
GO 

SELECT 
    CASE 
      WHEN ISNUMERIC(CAST(my_string AS VARCHAR(MAX))) = 1 
       THEN CAST(ISNULL(CAST(my_string AS VARCHAR(MAX)), '0') AS MONEY) 
      ELSE 0 
    END 
FROM 
    dbo.Test_Text_Convert 
GO 

J'ai défini les chaînes non valides sur 0, mais vous pouvez facilement modifier ce comportement.

+0

A travaillé parfaitement .. merci. – madcolor

1

Vous pouvez convertir null via la fonction coalesce:

coalesce(a, b) //returns b if a is null, a otherwise 
1

Pour lancer du texte à l'argent et poignée nulls, essayez ceci:

CAST(COALESCE(column, '0') AS MONEY) 

Voir COALESCE et CAST pour plus de détails. Une alternative quand les choses sont plus complexes est CASE..WHEN.

0

Je ne suis pas sûr de ce que la performance sera comme, mais 2005 a présenté les varchar(MAX) et nvarchar(MAX) types de données (entre autres comme varbinary(MAX). Ce sont de véritables varchars et nvarchars, et peuvent être utilisés dans un endroit où ils pouvaient (comme Compressé), mais aussi la capacité de Text et Image champs. En fait, les Text et Image types sont en fait dépréciés, donc aller de l'avant, il est recommandé d'utiliser les nouveaux types.

cela dit, vous pouvez simplement utiliser ceci:

convert(Money, coalesce(text_column_name, 0)) 
Questions connexes