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

Sql server 尝试获取datediff时,将表达式转换为数据类型nvarchar时出现“算术溢出错误”,sql-server,tsql,math,overflow,datediff,Sql Server,Tsql,Math,Overflow,Datediff,我有一个5列的表格,其中2列是日期。一个声明为nvarcharcreatedate,另一个声明为datetime CCcreatedate 我试图得到两个日期之间的差异,以显示在第三列datedifference上,这也是nvarchar。获取一个错误声明 将表达式转换为数据类型nvarchar时出现算术溢出错误 当我使用下面的查询时 Level1 Level2 createdate CCcreatedate datedifference 23 |

我有一个5列的表格,其中2列是日期。一个声明为nvarcharcreatedate,另一个声明为datetime CCcreatedate 我试图得到两个日期之间的差异,以显示在第三列datedifference上,这也是nvarchar。获取一个错误声明

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

当我使用下面的查询时

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   

我正在尝试查找这两个日期之间的差异,以便以后可以获得具有最小日期差异的不同级别2。我认为更新查询应该是:

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

请注意,相隔10周以上的日期需要6位数字来存储整数部分。如果可能,最好将结果存储为数字列。

我认为更新查询应该是:

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

请注意,相隔10周以上的日期需要6位数字来存储整数部分。如果可能,最好将结果存储为数字列。

您可能需要将datedifference列变大。我刚刚遇到了与运行以下代码时相同的错误:

update table
set datedifference = 
datediff(minute,CONVERT(datetime,[createdate] ),CONVERT(datetime,[CE_activity_create_Date]))
以分钟为单位的差值是25918。如果nvarchar列太小,则会出现错误。我鼓励您将datedifference列的数据类型更改为int而不是nvarchar

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

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

您可能需要将datedifference列放大。我刚刚遇到了与运行以下代码时相同的错误:

update table
set datedifference = 
datediff(minute,CONVERT(datetime,[createdate] ),CONVERT(datetime,[CE_activity_create_Date]))
以分钟为单位的差值是25918。如果nvarchar列太小,则会出现错误。我鼓励您将datedifference列的数据类型更改为int而不是nvarchar

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

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

varchar列有多大?为什么要使用varchar列来存储数值您应该始终为您使用的任何varchar变量和参数提供长度。数据类型有问题。varchar列有多大?为什么要使用varchar列来存储数值您应该始终为您使用的任何varchar变量和参数提供长度。这是数据类型的问题。