Как обновить поле DateTime в T-SQL? - PullRequest
68 голосов
/ 29 июня 2010

Следующий запрос не обновляет поле даты и времени:

update table
SET EndDate = '2009-05-25'
WHERE Id = 1

Я также пробовал без черточек, но это тоже не работает.

Ответы [ 8 ]

133 голосов
/ 29 июня 2010

В случае сомнений, быть явным о преобразовании типов данных, используя CAST / CONVERT :

UPDATE TABLE
   SET EndDate = CAST('2009-05-25' AS DATETIME)
 WHERE Id = 1
31 голосов
/ 29 июня 2010

Обычно это должно работать.

Но вы можете попробовать это? У меня на домашнем ПК нет SQL, я не могу попробовать себя

UPDATE table
SET EndDate = '2009-05-25 00:00:00.000'
WHERE Id = 1
9 голосов
/ 29 июня 2010

Строковый литерал разбивается на части в соответствии с текущей настройкой форматирования даты, см. SET DATEFORMAT. Один формат, который всегда будет работать, это формат '20090525'.

Теперь, конечно, вам нужно определить «не работает». Нет записей обновляется? Возможно, Id=1 не соответствует ни одной записи ...

Если написано «Одна запись изменилась», возможно, вам нужно показать нам, как вы проверяете ...

8 голосов
/ 30 июня 2010

Использование параметра DateTime - лучший способ.Однако, если вы все еще хотите передать DateTime в виде строки, тогда CAST не требуется, если используется формат, не зависящий от языка.

например,

Учитывая таблицу, созданную как:

create table t1 (id int, EndDate DATETIME)
insert t1 (id, EndDate) values (1, GETDATE())

Всегда должно работать следующее:

update t1 set EndDate = '20100525' where id = 1 -- YYYYMMDD is language agnostic

Будет работать следующее:

SET LANGUAGE us_english
update t1 set EndDate = '2010-05-25' where id = 1

Однако это не будет:

SET LANGUAGE british
update t1 set EndDate = '2010-05-25' where id = 1  

Это связано с тем, что YYYY-MM-DD не является языковым форматом (с точки зрения сервера SQL).

Формат ISO YYYY-MM-DDThh: mm: ss такжене зависит от языка и полезен, когда вам нужно передать ненулевое время.

Дополнительная информация: http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes

4 голосов
/ 27 марта 2017
UPDATE TABLE
   SET EndDate = CAST('2017-12-31' AS DATE)
 WHERE Id = '123'
2 голосов
/ 29 июня 2010

Это должно сработать, я бы поставил скобки вокруг [Дата], так как это зарезервированное ключевое слово.

1 голос
/ 11 марта 2015

Если вы не заинтересованы в указании времени, вы также можете использовать формат ' ДД / ММ / ГГГГ ', однако я бы остановился на методе Преобразование исоответствующий формат ISO, так как вам действительно следует избегать использования значений по умолчанию.

Вот пример:

SET startDate = CONVERT(datetime,'2015-03-11T23:59:59.000',126) WHERE custID = 'F24'

1 голос
/ 29 июня 2010

Может быть, есть триггер на столе, устанавливающий его обратно?

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