【问题标题】:How do I subtract and update a date column in an update statement?如何在更新语句中减去和更新日期列?
【发布时间】:2010-08-12 17:41:48
【问题描述】:

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

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

begin tran upd

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

 commit tran upd

我该怎么办?

【问题讨论】:

  • 应该approvedAtmodifiedAt@approvedAt@modifiedAt?这只是一个错字吗?

标签: sql-server-2005 tsql


【解决方案1】:

您收到此错误的原因可能是因为您尝试减去 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())

【讨论】:

    【解决方案2】:

    为什么不approvedAt &gt; '17530102' 这样你就不会超过日期时间边界

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多