2013-03-04 2 views
1

В Моей хранимой процедуры У меня есть STARTDATE и EndDate поля в Varchar (10)Как добавить DATETIME поле до + 1 день

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

Я даю ввод из пользовательского интерфейса для даты начала 03/01/2013 и 03/04/2013

для даты окончания мне нужно добавить один день + то есть, если мой EndDate является 03/04/2013 мне нужно обновить, что 03.05.2013 ..

Thanks

+0

Проверьте свой вопрос. После обновления вы также упоминали тот же результат. Вы имеете в виду, что 03/05/2013? –

+2

Вы изучали использование ** DATEADD ** вместе с ** CONVERT **? –

+3

Есть ли причина, по которой вы не используете тип данных даты? Затем вы можете просто использовать функцию dateadd(), чтобы добавить один день. – steoleary

ответ

3

SET @EndDate = DATEADD (d, 1, CAST(@StartDate AS datetime)) g ives вы ответите как datetime. Вы можете преобразовать обратно в VARCHAR, если вам нужно:

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

+0

Это дает мне ошибку, когда я пытаюсь сделать то же самое. Converstion типа varchar к дате даты и времени, тип данных данных, полученных вне значения диапазона. – user937194

+0

Спасибо. Я получил его. – user937194

5

Если это новая хранимая процедура (или нет какие-либо другие коды, использующие его), лучше всего, чтобы изменить переменные типа Дата. Потому что if you comparing data by dateвы должны сравнитьDates not varchar values.

Если вы хотите изменить тип переменной, то вы можете добавить день, используя функцию DATEADD(), как показано ниже.

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

Если вы CANNOT изменить типы переменных, то лучше передать их в ISO format (то есть; yyyymmdd), потому что ваш текущий формат строки культура специфичны и запрос может потерпеть неудачу в сервере с другой культурой.

--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 для перевода в английский язык. –

Смежные вопросы