"将表达式转换为数据类型nvarchar"的算术溢出错误当试图获得约会

时间:2014-11-05 22:14:45

标签: sql-server tsql math overflow datediff

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) 我试图在第3列(datedifference)上显示2个日期之间的差异,这也是nvarchar。收到错误说明

  

将表达式转换为数据类型nvarchar的算术溢出错误。

当我使用下面的查询时。

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

我正在尝试找出两个日期之间的差异,以便我可以稍后获得具有最小日期差异的不同(级别2)

2 个答案:

答案 0 :(得分:2)

您可能需要更大的日期差异列。我在运行以下代码时遇到了同样的错误:

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

差异,以分钟为单位为25,918。如果nvarchar列太小,则会出现错误。我建议您将日期差异列的数据类型更改为int而不是nvarchar。

您可以使用此代码查看大小(或小)或列的大小:

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

答案 1 :(得分:0)

我认为更新查询应该是:

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

请注意,相隔超过十周的日期需要6位数来存储 整数部分。如果可能的话,将结果存储为数字列会更好