SQL Server无法在日期调用方法

cca*_*mpj 21 sql-server-2008

我在一个名为ShiftDate的SQL Server 2008表中有一个DATETIME列.我想将其转换为查询中的DATE列:

SELECT     ID, ScheduleID, ShiftDate, CONVERT(DATE, ShiftDate) AS ProductionDate
FROM       dbo.ScheduleResults
Run Code Online (Sandbox Code Playgroud)

我在SSMS中编辑此查询.如果我在标准查询窗口中运行查询,我不会收到任何错误.如果我在视图编辑器窗口中运行它,我会收到错误"无法在日期调用方法".

我已经尝试了CAST方法,但它得到了同样的错误.

SELECT     ID, ScheduleID, ShiftDate, CAST(ShiftDate AS DATE) AS ProductionDate
FROM       dbo.ScheduleResults
Run Code Online (Sandbox Code Playgroud)

完整的错误消息是:

Executed SQL statement: SELECT ID, ScheduleID, ShiftDate, CAST(ShiftDate as DATE).ToString() AS ProductionDate FROM dbo.ScheduleResults
Error Source: .Net SqlClient Data Provider
Error Message: Cannot call methods on date.
Run Code Online (Sandbox Code Playgroud)

我倾向于认为这是SSMS中的一个错误,但我想从StackOverflow人员那里得到一些关于如何将datetime列转换为日期的反馈.我可以轻松地将其转换为字符串列,但它并不理想,因为Excel不会将其视为日期.

Wil*_*ill 20

你是对的,这是SSMS中的一个错误.我正在使用SQL Server Management Studio 2008 R2,当我尝试使用内置设计器创建View时,我收到与您相同的错误消息:

SQL Execution Error
Error Source: .Net SqlClient Data Provider
Error Message: Cannot call methods on date.
Run Code Online (Sandbox Code Playgroud)

正如@Aaron Bertrand所提到的,要解决此问题,请选择"新建查询"并在"查询"窗口中创建"视图".对于您的代码,它将是:

CREATE VIEW myView AS
SELECT     ID, ScheduleID, ShiftDate, CAST(ShiftDate AS DATE) AS ProductionDate
FROM       dbo.ScheduleResults
Run Code Online (Sandbox Code Playgroud)

  • 无论错误如何,只需保存视图即可 (7认同)
  • 4年后...而且这个bug仍然没有修复...... :(这很烦人,因为我在设计师中对它们进行更改时,我永远无法快速预览现有视图的结果. (3认同)
  • 8年过去了,这个bug依然没有修复…… (3认同)
  • 9年同样的bug (3认同)
  • 6年后,此错误仍未修复 (2认同)

小智 5

这似乎是一个真正的错误,正如上面提到的 /sf/users/32544641/,继承自 MS Access 过去的所有不便,您只需忽略错误消息并保存视图然后运行在常规 SSMS 窗口中,不会抛出任何错误。


小智 1

我可以假设 (ShiftDate AS DATE) 应该具有日期时间格式。如果你尝试这样做:

CAST(CONVERT(DATE, ShiftDate) as Varchar)