IT干货网

sql之Select 语句中的日期减法

sxdcgaq8080 2025年05月04日 编程设计 90 0

我目前正在处理 MS Access 数据库,但在日期减法方面遇到了问题。

本质上,我正在尝试创建一个目标日期,例如:

目标日期 = 截止日期 - 提前期

即提前期可能是 30 天,因此目标日期应比截止日期早 30 天。

我尝试使用的代码是这样的:

strSQL = "INSERT INTO dbo_DEALER_TASK ( Dlr_Number, Action_Id, Task_Id, Area_Id,  
Task_Deadline_Date, Responsible_Person_Id, Alternate_Person_Id, Priority, Comment,  
Suppress_Email, Dealer_Type ) " 
 
strSQL = strSQL & "SELECT dbo_DEALER_ACTION.Dlr_Number, dbo_DEALER_ACTION.Action_Id,  
qryAllTasksToAdd.Task_Id, qryAllTasksToAdd.Area_Id, Deadline_Date - Deadline_adjustment  
AS 'Task_Deadline_Date', qryAllTasksToAdd.Person_Responsible_Id,  
qryAllTasksToAdd.Alternate_Responsible_Id, qryAllTasksToAdd.Priority,  
qryAllTasksToAdd.Comment, qryAllTasksToAdd.Suppress_Email,  
qryAllTasksToAdd.Applies_To_Dealer_Type " 
 
strSQL = strSQL & "FROM dbo_DEALER_ACTION LEFT JOIN qryAllTasksToAdd ON  
(dbo_DEALER_ACTION.Dealer_Type = qryAllTasksToAdd.Applies_To_Dealer_Type) AND  
(dbo_DEALER_ACTION.Action_Id = qryAllTasksToAdd.Action_Id) " 
 
strSQL = strSQL & WHERE (((qryAllTasksToAdd.Task_Id)=" & Me.Task_Id & ") AND  
((dbo_DEALER_ACTION.Date_Completed) Is Null));" 
 
DoCmd.RunSQL strSQL 

当 VBA 代码执行该语句时,所有内容都会正确更新,但 Task_Deadline_Date 字段除外,该字段留空。

但真正让我感到困惑的是,如果我独立运行此 SQL 语句,它会按预期工作。在尝试了多种不同的想法后,我尝试用字符串文字日期替换“Deadline_Date - Deadline_adjustment AS 'Task_Deadline_Date'”,然后该语句运行良好

有人知道哪里出了问题吗?

谢谢,

克里斯

请您参考如下方法:

你引用了别名,你不应该这样做:

 Deadline_Date - Deadline_adjustment AS Task_Deadline_Date 

不是

 Deadline_Date - Deadline_adjustment AS 'Task_Deadline_Date' 


添加引号时,字段名称为 'Task_Deadline_Date'

根据你的日期字段的数据类型和你是否使用SQL Server,你可能需要使用DateAdd,例如:

DateAdd("d",-[Deadline_adjustment],[Deadline_Date]) 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!