将MS Access查询转换为SQL?

时间:2015-03-05 14:52:29

标签: sql sql-server ms-access

我一直在尝试修改并将以下查询从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;

谢谢!

1 个答案:

答案 0 :(得分:3)

罪魁祸首在于你的WHERE条款:

... -int(DateDiff("d",[tasks].[start_date],[days_1].[day_date])/14)

...开箱即用无效(不存在此类内置函数)。据推测,你正试图与演员进行一些四舍五入。有关T-SQL,请参阅CASTCONVERT。您可能还想查看函数CEILINGFLOOR。如果我没有建议你重新考虑你正在尝试做的事情,那将是我的疏忽。

关于查询本身,我再次给你的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
)

我真的不确定这是不是你要追求的,但如果没有更多的信息,这是我最好的猜测。