Следующий запрос не обновляет поле даты и времени:
update table
SET EndDate = '2009-05-25'
WHERE Id = 1
Я также попробовал его без тире, но это не работает также.
Когда есть сомнения, будьте явны в преобразовании типа данных с помощью CAST/CONVERT:
UPDATE TABLE
SET EndDate = CAST('2009-05-25' AS DATETIME)
WHERE Id = 1
В норме должно работать.
Но можно ли это попробовать? У меня нет SQL на моем домашнем ПК, я не могу попробовать себя
UPDATE table
SET EndDate = '2009-05-25 00:00:00.000'
WHERE Id = 1
Это должно сработать, я бы заключил [Дата] в скобки, поскольку это зарезервированное ключевое слово.
Строковый литерал размещается в соответствии с текущими настройками формата даты, см. SET DATEFORMAT
. Всегда будет работать формат «20090525».
Теперь, конечно, вам нужно определить «не работает». Никакие записи не обновляются? Возможно, Id = 1
не соответствует ни одной записи ...
Если там написано «Одна запись изменена», то, возможно, вам нужно показать нам, как вы проверяете ...
Лучше всего использовать параметр 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
Это потому, что 'ГГГГ-ММ-ДД' формат, не зависящий от языка (с точки зрения SQL-сервера).
Формат ISO «ГГГГ-ММ-ДДТчч: мм: сс» также не зависит от языка и полезен, когда вам нужно передать ненулевое время.
Дополнительная информация: http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes
Может быть, на столе есть триггер, возвращающий его обратно?