Как вычесть и обновить столбец даты в операторе обновления? - PullRequest
2 голосов
/ 12 августа 2010

Как мне обновить существующие столбцы 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 ]

4 голосов
/ 12 августа 2010

Причина, по которой вы получаете эту ошибку, скорее всего потому, что дата, из которой вы пытаетесь вычесть 1, приводит к тому, что результирующее значение становится меньше, чем минимальное значение для 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())
0 голосов
/ 12 августа 2010

Почему бы не approvedAt > '17530102', поэтому вы не идете до границы даты и времени

И не используете '1753-01-02', потому что это можно интерпретировать как 2 февраля 1753 для английского языка Великобритании и других настроек

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...