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 列是日期。一个声明为nvarchar
(createdate
),另一个是datetime
(CCcreatedate
)我试图得到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 级)
您可能需要使 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)