2017-02-03 7 views
0

Je dois ajouter des jours à ce jourT-SQL a échoué la conversion varchar int

select Name, Surname, Days, getdate(), 
CONVERT(VARCHAR(11),DATEADD(s,CONVERT(INT, Days)), getdate()),101) 
from myTAble 

mais j'obtiens l'erreur

Conversion failed when converting the varchar value '20' to data type int. 

une idée?

+0

Est-ce pour SQL Server? –

+0

Oui, c'est pour SQL – dev

+1

Pouvez-vous créer un exemple * reproductible? Evidemment, 'select convert (int, '20')' fonctionnera comme prévu sans une telle erreur. Le problème est donc quelque part dans vos données - ou peut-être que le message d'erreur que vous avez fourni n'est pas entièrement pertinent ... Avez-vous copié-collé exactement? Y a-t-il une chance que ce soit vraiment «2O» (lettre capiltale O) au lieu de «20» dans vos données? –

Répondre

4

Supports mélangés:

select Name, Surname, Days, getdate(), 
CONVERT(VARCHAR(11),DATEADD(s,CONVERT(INT, days), getdate()),101) 
from myTAble 
0

d'abord votre PARENTESIS sont incorrectes, mais c'est peu probable que la question ici. J'ai créé un exemple vérifiable:

create table MyTable 
(
Name varchar(100) 
,Surname varchar(100) 
,[Days] varchar(100) 
) 

GO 

insert into MyTable(Name,Surname,[Days]) 
values ('John', 'Doo', '20') 
,('Stack', 'Overflow', char(178) + char(176)) 
GO 

Et maintenant votre requête (avec PARENTESIS correcte)

select Name, Surname, Days, getdate(), 
CONVERT(VARCHAR(11),DATEADD(s,CONVERT(INT, Days), getdate()),101) 
from myTAble 

et j'ai réussi à reproduire votre problème (un peu)

Échec de la conversion la valeur varchar '² °' au type de données int.

La question ici est que vous avez un 20 est pas les caracteres correctes, peut-être vous avez un problème de classement .

Dans l'exemple ci-dessus, j'ai utilisé un problème réel que j'ai rencontré il y a un certain temps. Dans l'application est montre 20 mais en reallity dans la base de données, nous avons obtenu des caractères non standart.

Dans l'exemple ci-dessous quelques caractres spéciaux peuvent ressembler à ceux numériques

--° #176 ~ 0 --¹ #185 ~ 1 --² #178 ~ 2 --³ #179 ~ 3  
select char(178) + char(176) 

Vous pouvez essayer de vérifier si les données est numérique

select *, isnumeric([Days]) from MyTable 

Dans mon cas, nous aseptisée les données.