我在一个名为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不会将其视为日期.
我经常使用 INDIRECT 函数的地方之一是数据验证。如果我有一个名为 的表,tabColor其中有一列名为Color,并且我想将其用于数据验证,您可能会认为可以使用以下公式将数据验证设置为列表:
=tabColor[Color]
Run Code Online (Sandbox Code Playgroud)
但是,这会导致错误。如果用 包裹公式INDIRECT,它会起作用:
=INDIRECT("tabColor[Color]")
Run Code Online (Sandbox Code Playgroud)
所以,我有两个问题:
INDIRECT导致单元格被标记为易失性?我有一个SQL Server 2000数据库.我需要运行以下游标来触发单个记录的触发器(触发器一次只能在一条记录上运行).
DECLARE @REC as bigint
DECLARE coil1_cursor CURSOR FOR
SELECT Rec# FROM coil1 WHERE Timestamp BETWEEN '2011-05-10 06:00:00' AND '2011-05-10 07:00:00'
OPEN coil1_cursor
FETCH NEXT FROM coil1_cursor INTO @REC
WHILE (@@FETCH_STATUS=0)
BEGIN
Print @Rec
UPDATE coil1 SET ShiftLength=Null WHERE Rec#=@REC
FETCH NEXT FROM coil1_cursor INTO @REC
END
CLOSE coil1_cursor
DEALLOCATE coil1_cursor
Run Code Online (Sandbox Code Playgroud)
如果我注释掉UPDATE行,我会按照预期从Rec#字段获取序列号.如果我取消注释UPDATE行,批处理将进入无限循环.当我停止批处理时,它只显示更新它获得的第一个记录.这就像FETCH NEXT卡住了.有什么想法吗?