尝试获取 datediff 时“将表达式转换为数据类型 nvarchar 时出现算术溢出错误”

Har*_*ryS 1 t-sql sql-server math datediff overflow

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   
Run Code Online (Sandbox Code Playgroud)

我有一个有 5 列的表格,其中 2 列是日期。一个声明为nvarcharcreatedate),另一个是datetimeCCcreatedate)我试图得到2个日期之间的差异出现在第3栏(datedifference),这也是nvarchar。得到一个错误说明

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

当我使用下面的查询时。

update table
set datedifference = 
datediff(minute,CONVERT(nvarchar,CAST([createdate] as datetime)),CONVERT(nvarchar,CAST([CE_activity_create_Date]as datetime)))
Run Code Online (Sandbox Code Playgroud)

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

G M*_*ros 5

您可能需要使 datedifference 列更大。当我运行以下代码时,我遇到了与您相同的错误:

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

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

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

Select max_length 
from   sys.columns 
where  name = 'datedifference' 
       and object_id = object_id('YourTableNameHere')
Run Code Online (Sandbox Code Playgroud)