![](/img/trans.png)
[英]msaccess - sql view - autocomplete / intellisense or alternate way to write queries?
[英]Converting MSAccess Queries to SQL?
我一直在嘗試將以下查詢從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;
謝謝!
罪魁禍首在您的WHERE
子句中:
... -int(DateDiff("d",[tasks].[start_date],[days_1].[day_date])/14)
...開箱即用無效(不存在此類內置功能)。 大概您正在嘗試使用演員表進行四舍五入。 請參閱CAST
和CONVERT
for T-SQL。 您可能還需要研究CEILING
和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,而不是在第二次計算中,由於整數除法,第二次計算將始終返回int
(這樣就不需要使用強制轉換)。
更好的是,使用modulo :
(
DateDiff("d", [tasks].[start_date], [days_1].[daydate]) % 14 = 0
)
我真的不確定這是您要追求的目標,但是我最好的猜測是沒有更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.