2013-03-04 119 views
1

在我的存儲過程我有一個起始日期和結束日期字段是VARCHAR(10)如何添加日期時間字段,以+1天

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

我從開始日期03/01的UI給人一種輸入/ 2013年和2013年3月4日

對於結束日期,我需要增加一個日+就是如果我的結束日期是2013年3月4日我需要更新到2013年3月5日..

謝謝

+0

檢查您的問題。更新之後,你也提到了相同的結果。你的意思是03/05/2013? – 2013-03-04 17:55:42

+2

你有沒有用** DATEADD **和** CONVERT **一起看過? – 2013-03-04 17:56:19

+3

是否有一個原因,你沒有使用日期數據類型呢?然後你可以簡單地使用dateadd()函數來添加一天。 – steoleary 2013-03-04 17:56:58

回答

3

SET @EndDate = DATEADD (d, 1, CAST(@StartDate AS datetime)) g給你答案爲datetime。然後,您可以轉換回,如果你需要一個varchar:

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

+0

這是給我一個錯誤,當我試圖做同樣的事情.. varchar類型的日期時間日期時間數據類型的轉換導致超出範圍值。 – user937194 2013-03-04 18:06:09

+0

謝謝我明白了.. – user937194 2013-03-04 18:08:03

5

如果這是一個新的存儲過程(或不使用任何其他代碼),最好的辦法是改變你的變量Date類型。因爲if you comparing data by date你應該比較Dates not varchar values

如果你CAN改變變量類型,那麼你可以使用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轉化爲美國英語 – 2013-03-04 19:52:42