将 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
)
我真的不确定这是否是您想要的,但这是我最好的猜测,没有更多信息。
我一直在尝试修改以下查询并将其从 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
)
我真的不确定这是否是您想要的,但这是我最好的猜测,没有更多信息。