簡體   English   中英

將MSAccess查詢轉換為SQL?

[英]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)

...開箱即用無效(不存在此類內置功能)。 大概您正在嘗試使用演員表進行四舍五入。 請參閱CASTCONVERT for T-SQL。 您可能還需要研究CEILINGFLOOR函數。 如果我不建議您重新嘗試該邏輯,那我會很失落。

關於查詢本身,我再次考慮了您的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM