2013-02-10 177 views
1

我有我要插入到表中的這些數據。示例數據MM/DD/YYYY + 1天和12:00:00 PM如何將varchar數據插入日期時間字段(SQL Server 2005)?

基本上我需要的是插入當前日期+ 1天和特定時間12:00:00 PM。

我的代碼是這樣的:

DECLARE @MyEstimatedDate as varchar(100) ---TEMPORARY CONTAINER 
DECLARE @MyEstimatedDate1 as varchar(100) ---TEMPORARY CONTAINER 
DECLARE @MyEstimatedDate2 as varchar(100) ---TEMPORARY CONTAINER 
DECLARE @MyEstimatedDate3 as DATETIME  ---FINAL DATA NEEDED. This is the data I want inserted. 

SET @MyEstimatedDate = DATEADD(day,1,GETDATE()) 
SET @MyEstimatedDate1 = CONVERT(VARCHAR(100),@MyEstimatedDate,101) 
SET @MyEstimatedDate2 = @MyEstimatedDate1 + ' 12:00:00 PM' 
SET @MyEstimatedDate3 = cast(@MyEstimatedDate2 as datetime) ---I believe this is the error 

錯誤消息我得到:

一個char數據類型到datetime數據類型的轉換導致外的範圍內的日期時間值。

回答

2

只運用datetime數據時不使用varchar。 SQL Server 2005爲您提供了enough tools以便能夠避免轉換。

下面是一個更或從datetime值丟棄時間部分的更少known method

SELECT DATEADD(DAY, DATEDIFF(DAY, 0, @InputDateTime), 0); 

在上述例子中,DATEDIFF計算指定爲0日期和給定日期之間的天數。天數然後由DATEADD函數添加到0日期。最終結果爲datetime值,時間爲00:00:00,與@InputDateTime的日期相同。這是因爲0日期是1900-01-01 00:00:00的整數表示形式:其時間部分爲零,並且由於我們已將其增加了整整數天,因此結果的時間部分也是如此。

現在,如果您添加DATEDIFF+1而不是DATEDIFF天,您將獲得第二天。此外,如果使用12:00作爲日期遞增的0而不是0,那麼您將得到第二天的中午,這似乎是您想要的。所以,最後的表情看起來就像這樣:

SELECT DATEADD(DAY, DATEDIFF(DAY, 0, @InputDateTime) + 1, '12:00'); 

由於您的輸入時間戳應該是當前的日期&時,只需更換@InputDateTimeGETDATE()

SELECT DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()) + 1, '12:00'); 
+0

完美!感謝您的完整解釋。 – user2059064 2013-02-11 02:46:39

0

爲什麼不能簡單地做

cast(dateadd(day, 1, getdate()) as date) 

這是午夜。對於中午,做到這一點

dateadd(hour, 12, cast(cast(dateadd(day, 1, getdate()) as date) as datetime)) 

忘記以上,這是錯誤的。

正確答案是

dateadd(hour, 12, cast(cast(dateadd(day, 1, getdate()) as date) as datetime)) 

這一次,我甚至測試它。

+0

我得到這樣的輸出:「2/10/2013 11:58:28 PM'。我需要的輸出是這樣的2/10/2013 12:00:00 PM – user2059064 2013-02-10 16:01:06

+0

我的修改後的答案給了我2013-02-11 12:00:00.000。格式是本地設置的一個功能,我的不同於你的設置。但是,價值是正確的。 – 2013-02-10 16:23:22

+0

謝謝,但我得到了這個輸出:'2013/2/12 12:38:00'。我需要一個標準輸出像這樣'2/12/2013 12:00:00 PM'。 12:00:00 PM是恆定的。 – user2059064 2013-02-10 16:41:22

0

datetime類型包含日期+時間。根據你的情況爲@ MyEstimatedDate1只需要一個日期

DECLARE @MyEstimatedDate varchar(100) ---TEMPORARY CONTAINER 
DECLARE @MyEstimatedDate1 varchar(100) ---TEMPORARY CONTAINER 
DECLARE @MyEstimatedDate2 varchar(100) ---TEMPORARY CONTAINER 
DECLARE @MyEstimatedDate3 DATETIME  ---FINAL DATA NEEDED. This is the data I want inserted. 

SET @MyEstimatedDate = DATEADD(day, 1, GETDATE()) 
SET @MyEstimatedDate1 = CONVERT(VARCHAR(100), CAST(@MyEstimatedDate AS date), 101) 
SET @MyEstimatedDate2 = @MyEstimatedDate1 + ' 12:00:00 PM' 
SET @MyEstimatedDate3 = cast(@MyEstimatedDate2 as datetime) ---I believ 

或簡單的使用它

SELECT DATEADD(hour, 36, GETDATE() - CAST(GETDATE() AS time)) 
相關問題