2014-11-05 76 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') 
相关问题