我一直在尝试修改并将以下查询从Access数据库输入到SQL Server数据库中,但不断收到错误,例如: “int不是公认的内置函数名称”。
有什么方法吗?
SELECT Tasks.Task_id,
Days_1.next_working_day AS Day_date
FROM Intervals
INNER JOIN ((Days INNER JOIN Days AS Days_1 ON Days.day_of_week = Days_1.day_of_week)
INNER JOIN Tasks ON Days.Day_date = Tasks.Start_date)
ON Intervals.Interval_id = Tasks.Interval_id
WHERE (((Days_1.next_working_day)>=[tasks].[start_date])
AND
((Intervals.Interval_Type_Name)="Fortnightly")
AND
((DateDiff("d",[tasks].[start_date],[days_1].[day_date])/14-int(DateDiff("d",[tasks].[start_date],[days_1].[day_date])/14)<>0)=0))
ORDER BY Days_1.next_working_day;
谢谢!
答案 0 :(得分:3)
罪魁祸首在于你的WHERE
条款:
... -int(DateDiff("d",[tasks].[start_date],[days_1].[day_date])/14)
...开箱即用无效(不存在此类内置函数)。据推测,你正试图与演员进行一些四舍五入。有关T-SQL,请参阅CAST
和CONVERT
。您可能还想查看函数CEILING
和FLOOR
。如果我没有建议你重新考虑你正在尝试做的事情,那将是我的疏忽。
关于查询本身,我再次给你的WHERE
子句。正如戈登·林诺夫指出的那样,<>0)=0)
的目的尚不清楚,并且将成为您遇到的下一个错误。看起来原始查询可能是以迂回方式完整地提取2周的间隔。如果是这样,那么我最好猜测该条款的那一部分应该是什么样的:
(
DateDiff("d", [tasks].[start_date], [days_1].[day_date]) / 14.0 -
DateDiff("d", [tasks].[start_date], [days_1].[day_date]) / 14
= 0
)
现在注意除以14.0而不是第二次计算,由于整数除法,它总是返回int
(因此不需要强制转换)。
更好的是,使用modulo:
(
DateDiff("d", [tasks].[start_date], [days_1].[daydate]) % 14 = 0
)
我真的不确定这是不是你要追求的,但如果没有更多的信息,这是我最好的猜测。