查询返回的结果甚至没有结果,但是我收到了以下错误。
datediff函数导致溢出。的数量 分隔两个日期/时间实例的dateparts太大。尝试使用 日期不太精确的日期。
但没有什么可以溢出
以下工作:
SELECT cis.SaleBK
FROM dbo.Sales cis
INNER JOIN dim.CalendarDate sd on cis.SaleDateFK = sd.CalendarDatePK
WHERE sd.CalendarDate >= DATEADD(day,-1,dbo.DateToday())
这一个:
SELECT cis.SaleBK
,DATEDIFF(s,'1969-01-01',sd.CalendarDate) as SortOrder
FROM dbo.Sales cis
INNER JOIN dim.CalendarDate sd on cis.SaleDateFK = sd.CalendarDatePK
WHERE sd.CalendarDate = DATEADD(day,-1,dbo.DateToday())
但这不是,我无法弄清楚为什么
SELECT cis.SaleBK
,DATEDIFF(s,'1969-01-01',sd.CalendarDate) as SortOrder
FROM dbo.Sales cis
INNER JOIN dim.CalendarDate sd on cis.SaleDateFK = sd.CalendarDatePK
WHERE sd.CalendarDate >= DATEADD(day,-1,dbo.DateToday())
答案 0 :(得分:0)
我写了一个循环来检查datediff
何时返回错误:
; with Dates as
(
select cast('2012-01-01' as date) as dt
union all
select dateadd(day, 1, dt)
from Dates
)
select dt
, DATEDIFF(s,'1969-01-01',dt)
from Dates
option (maxrecursion 0)
1969-01-01
和2037-01-20
之后的秒数是第一个太大的秒数。
所以看起来DateDiff
返回的最大数字是2^31
或2147483647
。
您可以通过限制查询的日期范围来避免错误,例如:
WHERE sd.CalendarDate >= DATEADD(day,-1,dbo.DateToday())
and sd.CalendarDate < '2037-01-20'