2016-07-10 13 views
1

次のクエリをSQL ServerでVisual Basicから実行すると、正しく実行され、データが返されます。私はそれが文字列DateAdd関数文字列からdatetimeを変換するときにエラーが発生します

から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

日付は実際にdatetimeとして保存されていますか?dateまたはdatetimeの日付変数ですか? – scsimon

+0

あなたのdate1とdate2がVARCHAR – scsimon

+0

であると思われます。私のコードでfill関数を使用すると、date1とdate2がvarchar(文字列)として入力されます。 –

答えて

0

日付1と日付2をキャストまたは変換してみてください。

CAST(@date1 as DATE) 

特定の形式については、CONVERT()を使用することもできます。

+0

キャストAS日付はSQL Server 2005では動作しません、代わりにDateTimeを使用しましたが、残念ながら私には同じエラーが表示されます –

+0

2つの質問。 maintenanceStartDateはdatetimeまたはvarcharフィールドですか?そして2つ、どのような形式でdate1とdate2の日付を入力していますか – scsimon

+0

助けてよかった!それは何ですか? – scsimon

関連する問題