将 MSAccess 查询转换为 SQL?

Converting MSAccess Queries to SQL?

我一直在尝试修改以下查询并将其从 Access 数据库输入到 SQL 服务器数据库中,但不断出现错误,例如"int is not a recognised built in function name".

有什么解决办法吗?

    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;

谢谢!

罪魁祸首在您的 WHERE 子句中:

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

...开箱即用无效(不存在此类内置函数)。大概你正在尝试用演员做一些四舍五入。参见 CAST and CONVERT for T-SQL. You might also want to look into functions CEILING and FLOOR。如果我不建议重新审视你正在尝试做的事情的逻辑,那我就是失职了。

关于查询本身,我再次查看了您的 WHERE 子句。正如 Gordon Linoff 指出的那样,<>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 而不是第二次计算,由于整数除法,第二次计算总是 return 和 int(因此不需要转换)。

更好的是,使用 modulo:

(
    DateDiff("d", [tasks].[start_date], [days_1].[daydate]) % 14 = 0
)

我真的不确定这是否是您想要的,但这是我最好的猜测,没有更多信息。