【发布时间】:2012-07-03 16:56:20
【问题描述】:
该查询即使在它确实有效的地方也没有返回任何结果,并且我收到以下错误。
datediff 函数导致溢出。的数量 分隔两个日期/时间实例的日期部分太大。尝试使用 datediff 具有不太精确的日期部分。
但是没有什么可以溢出的
以下作品:
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())
【问题讨论】:
-
您是否有任何
CalendarDate值超过〜24 年?如果是这样,则自 1969 年以来的秒数超过了DATEDIFF可以返回的时间。另外,为什么dbo.DateToday()? -
啊,这只是我数据库上的一个小函数,我们使用它而不是 getdate,返回没有时间的 getdate。在这种情况下,它没有任何实际用途,但是我出于习惯使用它。
-
另外,是的,CalendarDate 会上升到 2050,但它的键是 Sales 表,该表只有昨天的销售额,所以它肯定不应该对任何东西做 datediff 吗?
标签: sql sql-server tsql datediff