2016-07-10 32 views
1

當我在Visual Studio中執行下面的查詢,從Visual Basic,它運行正常,並返回我的數據。但是,當我寫我的代碼填寫查詢它變得異常DateAdd函數原因語法錯誤從字符串轉換datetime

語法錯誤從字符串轉換日期時間

我認爲錯誤是where條款

這是我的查詢中:

SELECT  Maint_TaskSheetDetails.TaskId, 
DATEADD(dd, (SELECT  MaintenanceRate 
           FROM   Maint_ItemTasks 
           WHERE  (TaskId = Maint_TaskSheetDetails.TaskId)), 
Maint_TaskSheets.SheetMaintenanceDate) AS Expr1, Maint_ItemTasks_5.TaskName, 
         Maint_Items.ItemName, All_CostCenter.CostCenterName 
FROM   Maint_TaskSheets INNER JOIN 
         Maint_TaskSheetDetails ON Maint_TaskSheets.TaskSheetId = Maint_TaskSheetDetails.TaskSheetId INNER JOIN 
         Maint_ItemTasks AS Maint_ItemTasks_5 ON Maint_TaskSheetDetails.TaskId = Maint_ItemTasks_5.TaskId INNER JOIN 
         Maint_Items ON Maint_TaskSheetDetails.ItemId = Maint_Items.ItemId INNER JOIN 
         All_CostCenter ON Maint_TaskSheets.CostCenterId = All_CostCenter.CostCenterID 
**WHERE  (@Date1 <= DATEADD(dd, 
          (SELECT  MaintenanceRate 
           FROM   Maint_ItemTasks AS Maint_ItemTasks_3 
           WHERE  (TaskId = Maint_TaskSheetDetails.TaskId)), Maint_TaskSheets.SheetMaintenanceDate)) AND (@Date2 >= DATEADD(dd, 
          (SELECT  MaintenanceRate 
           FROM   Maint_ItemTasks AS Maint_ItemTasks_2 
           WHERE  (TaskId = Maint_TaskSheetDetails.TaskId)), Maint_TaskSheets.SheetMaintenanceDate))** 
UNION ALL 
SELECT  Maint_ItemTaskDetails.TaskId, DATEADD(dd, 
          (SELECT  MaintenanceRate 
           FROM   Maint_ItemTasks AS Maint_ItemTasks_1 
           WHERE  (TaskId = Maint_ItemTaskDetails.TaskId)), Maint_ItemTaskDetails.MaintenanceStartingDate) AS Expr1, Maint_ItemTasks_4.TaskName, 
         Maint_Items_1.ItemName, All_CostCenter_1.CostCenterName 
FROM   Maint_ItemTaskDetails INNER JOIN 
         Maint_ItemTasks AS Maint_ItemTasks_4 ON Maint_ItemTaskDetails.TaskId = Maint_ItemTasks_4.TaskId INNER JOIN 
         Maint_Items AS Maint_Items_1 ON Maint_ItemTasks_4.ItemId = Maint_Items_1.ItemId INNER JOIN 
         All_CostCenter AS All_CostCenter_1 ON Maint_ItemTaskDetails.CostCenterId = All_CostCenter_1.CostCenterID 
**WHERE  (@Date1 <= DATEADD(dd, 
          (SELECT  MaintenanceRate 
           FROM   Maint_ItemTasks AS Maint_ItemTasks_1 
           WHERE  (TaskId = Maint_ItemTaskDetails.TaskId)), Maint_ItemTaskDetails.MaintenanceStartingDate)) AND (@Date2 >= DATEADD(dd, 
          (SELECT  MaintenanceRate 
           FROM   Maint_ItemTasks AS Maint_ItemTasks_1 
           WHERE  (TaskId = Maint_ItemTaskDetails.TaskId)), Maint_ItemTaskDetails.MaintenanceStartingDate))** AND (Maint_ItemTaskDetails.TaskId NOT IN 
          (SELECT  Maint_TaskSheetDetails_1.TaskId 
           FROM   Maint_TaskSheetDetails AS Maint_TaskSheetDetails_1 INNER JOIN 
                 Maint_TaskSheets AS Maint_TaskSheets_1 ON Maint_TaskSheetDetails_1.TaskSheetId = Maint_TaskSheets_1.TaskSheetId)) 
+0

您的日期實際上是否存儲爲日期時間,並且是日期類型或日期時間的日期變量? – scsimon

+0

我懷疑你的date1和date2是VARCHAR – scsimon

+0

是的,當我在我的代碼中使用填充函數....date1和date2作爲varchar(字符串)輸入 –

回答

0

嘗試鑄造或轉換您的date1和date2像這樣。

CAST(@date1 as DATE) 

您還可以使用CONVERT()作爲特定格式。

+0

Cast AS Date在sql server 2005中不起作用,我用DateTime代替,但不幸的是它給了我同樣的錯誤 –

+0

有兩個問題。 maintenanceStartDate是一個datetime或varchar字段嗎?還有兩種,你輸入date1和date2的日期格式 – scsimon

+0

很高興幫助!這是哪個? – scsimon

相關問題