2014-11-05 50 views
1
Level1 Level2  createdate  CCcreatedate  datedifference 

23 | 3 | 10/24/2014 17:07 | 10/24/2014 17:07 
24 | 3 | 10/24/2014 23:48 | 10/25/2014 17:07 
25 | 3 | 10/25/2014 9:57 | 10/26/2014 17:07 
26 | 1 | 10/26/2014 17:49 | 10/27/2014 17:07 
27 | 1 | 10/16/2014 12:53 | 10/28/2014 17:07 
28 | 1 | 10/16/2014 12:32 | 10/29/2014 17:07 
29 | 2 | 10/16/2014 13:58 | 10/30/2014 17:07 
30 | 2 | 10/16/2014 16:40 | 10/31/2014 17:07 
31 | 2 | 10/16/2014 20:28 | 11/1/2014 17:07 
32 | 2 | 10/15/2014 17:09 | 11/2/2014 17:07 

我有一個5列的表,其中2個是日期。一個宣佈爲nvarcharcreatedate),另一個爲datetimeCCcreatedate) 我想獲得2日期之間的差異顯示在第3列(datedifference),這也是nvarchar。獲取錯誤說明「試圖獲得datediff時將表達式轉換爲數據類型nvarchar的算術溢出錯誤」

將表達式轉換爲數據類型爲nvarchar的算術溢出錯誤。

當我使用下面的查詢。

update table 
set datedifference = 
datediff(minute,CONVERT(nvarchar,CAST([createdate] as datetime)),CONVERT(nvarchar,CAST([CE_activity_create_Date]as datetime))) 

我試圖找到兩個日期之間的區別,所以我可以在以後得到最小datedifference的不同(2級)

+0

有多大'varchar'列?你爲什麼使用'varchar'列來存儲數值? – 2014-11-05 22:23:43

+0

[不良習慣踢:聲明VARCHAR沒有(長度)](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length .aspx) - 你應該**總是**爲你使用的任何'varchar'變量和參數提供一個長度 – 2014-11-06 06:07:21

+0

謝謝你們。這是數據類型的問題。 – HarryS 2014-11-07 18:56:09

回答

0

我想更新查詢應該是:

update table 
set datedifference = 
datediff(minute,CONVERT(datetime,[createdate]),CONVERT(datetime,[CE_activity_create_Date])) 

請注意,相隔約十週以上的日期需要6位數來存儲只是的整數部分。如果可能的話,將多得多作爲數字列存儲結果。

1

你可能需要使你的有時候差異的列變大。當我運行以下代碼時,我剛剛得到了同樣的錯誤:

declare @T nvarchar(3) 
Select @T = DateDiff(minute, '10/15/2014 17:09','11/2/2014 17:07') 

以分鐘爲單位的差異爲25,918。如果你的nvarchar列太小,你會得到錯誤。我鼓勵你將你的datedifference列的數據類型改爲int而不是nvarchar。

您可以使用此代碼來看看如何大(或小)或列是:

Select max_length 
from sys.columns 
where name = 'datedifference' 
     and object_id = object_id('YourTableNameHere') 
相關問題