2013-03-04 3 views
1

Dans Ma procédure stockée J'ai champs StartDate et EndDate sont Varchar (10)Comment ajouter datetime champ à + 1 jour

@StartDate Varchar(10), 
@EndDate Varchar(10) 

Je donne une entrée de l'interface utilisateur pour la date de début 03/01/2013 et 03/04/2013

pour la date de fin, je dois d'ajouter un jour + qui est si mon EndDate est 03/04/2013 je dois mise à jour à 05/03/2013 ..

Remerciements

+0

Vérifiez votre question. Après la mise à jour, vous avez également mentionné le même résultat. Tu veux dire que 03/05/2013? –

+2

Avez-vous envisagé d'utiliser ** DATEADD ** avec ** CONVERT **? –

+3

Y a-t-il une raison pour laquelle vous n'utilisez pas le type de données de date pour cela? Ensuite, vous pouvez simplement utiliser la fonction dateadd() pour ajouter un jour. – steoleary

Répondre

3

SET @EndDate = DATEADD (d, 1, CAST(@StartDate AS datetime)) g vous donne la réponse en tant que datetime. Vous pouvez ensuite convertir de nouveau à un varchar si vous avez besoin:

SET @EndDate = CAST(DATEADD (d, 1, CAST(@StartDate AS datetime)) AS varchar(10))

+0

Cela me donne une erreur quand j'essaye de faire la même chose .. Conversation d'un type de varchar à la date et à l'heure de la date de l'heure le type de données a abouti hors de la valeur de gamme. – user937194

+0

Merci je l'ai eu .. – user937194

5

Si cela est une nouvelle procédure stockée (ou pas d'autres codes qui l'utilisent), la meilleure chose est de changer vos variables de type Date. Parce que if you comparing data by datevous devriez comparerDates not varchar values.

Si vous modifiez le type de variable CAN, vous pouvez ajouter un jour en utilisant la fonction DATEADD() comme ci-dessous.

--if @enddate is a date type 
select @enddate = dateadd(day,1,@enddate) 

Si vous changez CANNOT types de variables, vous feriez mieux de les transmettre à ISO format (c.-à-; yyyymmdd) parce que le format de votre chaîne actuelle est la culture spécifique et requête pourrait échouer dans un serveur avec une autre culture.

--date pass as yyyymmdd (not culture specific) 
select @enddate = convert(varchar(10), 
         dateadd(day, 1, convert(date, @enddate)), 101) 

--date pass as mm/dd/yyyy (US culture) 
select @enddate = convert(varchar(10), 
         dateadd(day, 1, convert(date, @enddate,101)), 101) 
+0

+1 pour convertir en anglais langue anglaise –

Questions connexes