2010-06-21 4 views
0

J'ai essayé quelque chose comme ceci:Est-il possible de convertir nvarchar en int?

select PREPRO = case when (isnumeric(PREPRO) = 1 and 
PREPRO in ('0','1','-1')) or 
convert(varchar, PREPRO) in ('True','False') 
then convert(bit, convert(integer, PREPRO)) else 'No' end 
from dbo.TI10SE 

prépro contient tous les « faux ».

Je reçois cette erreur:

La conversion a échoué lors de la conversion de la valeur nvarchar 'Faux' type de données int. Cela signifie-t-il qu'un nvarchar ne peut être converti en entier? Je suppose que c'est parce que certaines données peuvent être perdues.

+1

De quel type est 'PREPRO'? – Oded

+0

C'est nvarchar. Ce n'est pas possible. – Abs

Répondre

1

Exemple d'utilisation pour y parvenir:

DECLARE @PREPRO VARCHAR(5) 
SET @PREPRO = 'False' 
SELECT CASE WHEN @PREPRO = 'False' THEN 0 ELSE 1 END 
+0

Oui, c'est exactement ce que j'ai fait. J'ai fait confiance au code que j'ai vu comme il a été écrit par une personne âgée et a essayé de l'utiliser, mais a ensuite réalisé qu'il n'est pas possible de convertir nvarchar en int. – Abs

5

Vous essayez de convertir votre PREPRO à un nombre entier, même si la valeur qu'elle détient est True ou False:

convert(integer, PREPRO) 

Vous ne pouvez pas convertir la valeur False à un nombre entier.

Le conditionnel dans votre clause WHEN est évaluée à vrai lorsque PREPRO est un nombre entre 0, 1, -1 OU quand il évalue soit True ou False. Dans de ces cas, vous essayez de convertir cette valeur en nombre entier, puis à un bit.

1

nvarchar peut être converti en un entier si elle contient un entier

DECLARE @PREPRO VARCHAR(5) 
SET @PREPRO = '10' 

SELECT CONVERT(integer, @PREPRO) 

T-SQL ne sait pas quoi associer à « Faux » ou "True", vous devrez donc utiliser une instruction CASE comme dit rdkleine.

également dans cette déclaration:

convert(bit, convert(integer, PREPRO)) else 'No' end 

Vous allez recevoir une erreur, parce que « Non » n'est pas de type bit, qu'est-ce que vous essayez de revenir?