如何在更新语句中减去和更新日期列?

时间:2010-08-12 17:41:49

标签: sql-server-2005 tsql

如何更新更新语句中的现有DateTime列? 我想减去一天但是我收到一条错误消息,说我不能在更新中使用DateAdd(有关溢出的内容)。

我想出了这个查询,但当然不会执行。

begin tran upd

  update answer 
  set SentForApprovalAt = DateAdd(day, -1, approvedAt)
  where 
   approvedAt > '1753-01-01'
   and approvedAt < modifiedAt

 commit tran upd

我该怎么办?

2 个答案:

答案 0 :(得分:4)

您收到此错误的原因可能是因为您尝试从中减去1的日期导致结果值小于minimum value for a TSQL datetime

使用以下测试用例:

CREATE TABLE answer
(
 SentForApprovalAt DATETIME NULL,
 ApprovedAT DATETIME,
 ModifiedAT DATETIME
)

/* The query will work for this record */
INSERT
INTO   Answer 
       (sentforapprovalat, approvedat, modifiedat)
VALUES (null, '1800-01-01 00:00:00.000', GETDATE())

/* The query will error with 'Adding a value to a 'datetime' column 
   caused an overflow.' for this record */
INSERT 
INTO   Answer
       (sentforapprovalat, approvedat, modifiedat)
VALUES (null, '1753-01-01 01:00:00.000', GETDATE())

答案 1 :(得分:0)

为什么不approvedAt > '17530102'所以你不要去日期时间边界

请勿使用'1753-01-02',因为它可以解释为2nd Feb 1753 for UK english and other settings